微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐