MySQL 中部分索引或过滤索引的解决方法?
我正在使用 MySQL 数据库。我知道 PostgreSQL 和 SQL Server 支持部分索引。就我而言,我想做这样的事情:
CREATE UNIQUE INDEX myIndex ON myTable (myColumn) where myColumn <> 'myText'
我想创建一个唯一的约束,但如果它是特定的文本,它应该允许重复。
我找不到在 MySQL 中执行此操作的直接方法。但是,有解决方法可以实现这一目标吗?
I am using a MySQL database. I know PostgreSQL and SQL Server supports partial indexing. In my case I want to do something like this:
CREATE UNIQUE INDEX myIndex ON myTable (myColumn) where myColumn <> 'myText'
I want to create a unique constraint but it should allow duplicates if it is a particular text.
I couldn't find a direct way to do this in MySQL. But, is there a workaround to achieve it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
过滤索引可以用函数索引和 CASE 表达式(MySQL 8.0.13 及更高版本)来模拟:
db>>小提琴演示
输出:
Filtered indexes could be emulated with function indexes and
CASE
expression(MySQL 8.0.13 and newer):db<>fiddle demo
Output:
我想只有一种方法可以实现这一目标。您可以向表中添加另一列,在其上创建索引并创建触发器,或者在存储过程中进行插入/更新,以使用以下条件填充此列:
希望有帮助
I suppose there is only one way to achieve it. You can add another column to your table, create index on it and create trigger or do insert/update inside your stored procedures to fill this column using following condition:
Hope it helps
最好的解决方法是创建一个具有必要条件的持久生成列,并在其上添加唯一索引。
The best workaround is to create a persisted generated column with the necessary condition and a add unique index on it.