关于数据库:MySQL是否会忽略唯一约束的空值?

Does MySQL ignore null values on unique constraints?

我有一个我想要独特的电子邮件专栏。 但我也希望它接受空值。 我的数据库可以通过这种方式发送2封空邮件吗?


是的,MySQL允许具有唯一约束的列中的多个NULL。

1
2
3
4
5
6
CREATE TABLE table1 (x INT NULL UNIQUE);
INSERT table1 VALUES (1);
INSERT table1 VALUES (1);   -- Duplicate entry '1' for key 'x'
INSERT table1 VALUES (NULL);
INSERT table1 VALUES (NULL);
SELECT * FROM table1;

结果:

1
2
3
4

对于所有数据库都不是这样。例如,SQL Server 2005及更早版本仅允许具有唯一约束的列中的单个NULL值。


来自文档:

"a UNIQUE index permits multiple NULL
values for columns that can contain
NULL"

这适用于除BDB之外的所有引擎。


我不确定作者最初只是在询问是否允许重复值,或者是否有一个隐含的问题在这里询问"如何在使用UNIQUE时允许重复的NULL值?"或者"如何只允许一个UNIQUE NULL值?"

问题已经得到解答,是的,您在使用UNIQUE索引时可以有重复的NULL值。

因为我在搜索"如何允许一个UNIQUE NULL值时偶然发现了这个答案"。对于其他可能在做同样事情时偶然发现这个问题的人,其余的答案都是给你的......

在MySQL中,您不能有一个UNIQUE NULL值,但是通过插入空字符串的值可以有一个UNIQUE空值。

警告:除字符串以外的数字和类型可能默认为0或其他默认值。


避免可空的唯一约束。您始终可以将列放在新表中,使其为非null且唯一,然后仅在您拥有该值时才填充该表。这可确保可以正确实施对列的任何键依赖性,并避免可能由null引起的任何问题。