【发布时间】:2012-03-06 01:04:36
【问题描述】:
我的 SQL 架构是
CREATE TABLE Foo (
`bar` INT NULL ,
`name` VARCHAR (59) NOT NULL ,
UNIQUE ( `name`, `bar` )
) ENGINE = INNODB;
MySQL 允许重复以下语句,导致重复。
INSERT INTO Foo (`bar`, `name`) VALUES (NULL, 'abc');
尽管有
UNIQUE ( `name`, `bar` )
为什么可以容忍这种情况,我该如何阻止它?
【问题讨论】:
-
将其设为主键,不允许在任一字段中出现空值。或者使字段不为空。根据 mysql 文档:dev.mysql.com/doc/refman/5.1/en/create-index.html“对于所有引擎,唯一索引允许可以包含 null 的列的多个 null 值”。
-
NULL不是一个值。正如@MarcB 所说,您需要为此禁止NULL -
看起来这是一个错误:bugs.mysql.com/bug.php?id=8173。 (至少错误报告中的一些人是这样认为的)
-
@JNK:错误报告中的最后一篇文章有一点恕我直言,它说这是一个错误。但无论如何。
-
@juergend IMO 它仍然不是一个错误,b/c 这太接近将
NULL计算为一个值,它不是。