使用InnoDB /
MySQLi,我有一个简单的表:mytable.该表有四个字段:id(primary,auto_inc),field1,field2,field3.所有这些都是BIGINT,除了id,可以是NULL.
我已经添加了如下所示的唯一约束:
ALTER TABLE mytable ADD UNIQUE INDEX(field1,field3);
但是,我完全可以添加以下行,而不会生成任何错误.我想为此产生一个“重复”错误,但它不:
INSERT INTO mytable VALUES (NULL,3,NULL) INSERT INTO mytable VALUES (NULL,NULL)
如果所有字段都具有非NULL值,则它仅生成“重复”错误 – 例如,
INSERT INTO mytable VALUES (2,4) INSERT INTO mytable VALUES (2,4)
你不能比较NULL(如果你比较NULL甚至NULL = NULL,结果总是FALSE)这个行为记录在
MySQL ref.
A UNIQUE index creates a constraint such that all values in the index
must be distinct. An error occurs if you try to add a new row with a
key value that matches an existing row. For all engines,a UNIQUE
index permits multiple NULL values for columns that can contain NULL.
所以我认为唯一的方法是定义列NOT NULL或者在触发器中处理这个问题.