使用where子句创建UNIQUE INDEX

时间:2018-02-06 19:24:51

标签: mysql sql

我在mysql上使用CREATE UNIQUE INDEX的where子句时遇到了麻烦。我知道你不能只在CREATE UNIQUE INDEX结束时添加where子句。以下示例。

CREATE UNIQUE INDEX FAKE_TABLE_INDEX ON TABLE_NAME (COLUMN_NAME) WHERE INACTIVE = 0;

上面的这个查询给了我一个错误。那么有什么办法可以解决这个问题。

1 个答案:

答案 0 :(得分:1)

MySQL没有过滤索引。如果我理解他们做了什么(从阅读Microsoft docs),我认为最接近的类似特征是多列索引:

CREATE INDEX fake_table_index ON table_name (inactive, column_name);

这比过滤的索引更昂贵,因为它索引inactive的所有值,而不仅仅是inactive = 0的所在值。

这也没有过滤索引所做的唯一约束。它仅对优化查询有用,而不是强制执行唯一性。如果需要,你必须使用触发器。