如何解决当涉及的字段之一为NULL时,MySQL错误地允许重复条目
您无法比较NULL(如果您将任何与NULL进行比较,即使NULL =NULL的结果始终是FALSE
),这种行为已记录在MySQL参考中。
UNIQUE索引会创建一个约束,以使索引中的所有值都必须是唯一的。如果您尝试添加键值与现有行匹配的新行,则会发生错误。对于所有引擎,UNIQUE索引允许可以包含NULL的列使用多个NULL值。
因此,我认为唯一的方法是定义列NOT NULL或在触发器中处理此问题。
解决方法
使用InnoDB / MySQLi,我有一个简单的表:mytable
。该表有四个字段:id
(伯,auto_inc)
,field1
,。field2
field3
他们都是BIGINT
和,除了id
,可以NULL
。
我添加了一个独特的约束,如下所示:
ALTER TABLE mytable ADD UNIQUE INDEX(field1,field2,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。