php – 当涉及的一个字段为NULL时,MySQL错误地允许重复条目

前端之家收集整理的这篇文章主要介绍了php – 当涉及的一个字段为NULL时,MySQL错误地允许重复条目前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用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值,那么我怎么能告诉MysqL生成“重复”错误

编辑:这是以前添加MysqL错误http://bugs.mysql.com/bug.php?id=25544

你不能比较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或者在触发器中处理这个问题.

猜你在找的PHP相关文章