如何在 mysql 中创建过滤的唯一索引?有可能?



我需要在MySQL数据库表上创建一个过滤索引。

我要创建的索引必须是唯一的列X和Z,当Z不是NULL。

我知道如何在SQLServer中创建它,如下:

CREATE NONCLUSTERED INDEX IndexName
ON TableName(ColumnX, ColumnZ)
WHERE ColumnZ IS NOT NULL ;

我已经在MySQL中尝试过了:

CREATE INDEX demo_idx
ON camp_cdr (call_id,ans_time) 
WHERE ans_time is not null;

但是我得到一个语法错误。我已经搜索了各种论坛和文档,但没有找到。

知道怎么做吗?

我想要创建的索引必须是唯一的列X和Z,当Z不是NULL

如果你通过(X,Z)创建唯一索引,那么在至少一个列中包含NULL的所有行都将被视为唯一的,因此即使在另一个列中的值被复制,也将被允许。

CREATE TABLE test ( x INT, z INT, UNIQUE (x,z) );
INSERT INTO test VALUES (1,1),(1,2),(2,1),(2,2);
INSERT INTO test VALUES (1,1);  -- not allowed
Duplicate entry '1-1' for key 'test.x'
INSERT INTO test VALUES (1,NULL),(1,NULL),(NULL,2),(NULL,2);  -- allowed
TABLE test;

相关内容

  • 没有找到相关文章