加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:00:24 所属栏目:PHP教程 来源:网络整理
导读:使用InnoDB / MySQLi,我有一个简单的表:mytable.该表有四个字段:id(primary,auto_inc),field1,field2,field3.所有这些都是BIGINT,除了id,可以是NULL. 我已经添加了如下所示的唯一约束: ALTER TABLE mytable ADD UNIQUE INDEX(field1,field3); 但是,我完全
使用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或者在触发器中处理这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读