我在mysql上使用CREATE UNIQUE INDEX的where子句时遇到了麻烦。我知道你不能只在CREATE UNIQUE INDEX结束时添加where子句。以下示例。
CREATE UNIQUE INDEX FAKE_TABLE_INDEX ON TABLE_NAME (COLUMN_NAME) WHERE INACTIVE = 0;
上面的这个查询给了我一个错误。那么有什么办法可以解决这个问题。
答案 0 :(得分:1)
MySQL没有过滤索引。如果我理解他们做了什么(从阅读Microsoft docs),我认为最接近的类似特征是多列索引:
CREATE INDEX fake_table_index ON table_name (inactive, column_name);
这比过滤的索引更昂贵,因为它索引inactive
的所有值,而不仅仅是inactive = 0
的所在值。
这也没有过滤索引所做的唯一约束。它仅对优化查询有用,而不是强制执行唯一性。如果需要,你必须使用触发器。