我有一个我希望独一无二的电子邮件专栏。但我也希望它接受空值。我的数据库可以通过这种方式发送2封空电子邮件吗?
答案 0 :(得分:344)
是的,MySQL允许列中具有唯一约束的多个NULL。
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;
结果:
x
NULL
NULL
1
对于所有数据库都不是这样。例如,SQL Server 2005及更早版本只允许具有唯一约束的列中的单个NULL值。
答案 1 :(得分:97)
答案 2 :(得分:6)
我不确定作者最初是否只是询问是否允许重复值,或者此处是否存在隐含问题,"如何在使用{{1}时允许重复的NULL
值}&#34?;或者"如何只允许一个UNIQUE
UNIQUE
值?"
问题已经得到解答,是的,您在使用NULL
索引时可能会有重复的NULL
值。
由于我在搜索"如何允许一个UNIQUE
UNIQUE
值时偶然发现了这个答案。"对于那些在做同样事情时偶然发现这个问题的人,其余的答案都是给你的......
在MySQL中,您不能拥有一个NULL
UNIQUE
值,但是您可以通过插入空字符串的值来获得一个NULL
空值。
警告:除字符串以外的数字和类型可能默认为0或其他默认值。
答案 3 :(得分:4)
避免可空的唯一约束。您始终可以将列放在新表中,使其为非null且唯一,然后仅在您拥有该值时才填充该表。这可以确保可以正确实施对列的任何键依赖性,并避免由null引起的任何问题。
答案 4 :(得分:0)
一个简单的答案是:No, it doesn't
说明:根据唯一约束的定义(SQL-92)
当且仅当表中的两行中唯一列中的非空值相同时,才满足唯一约束
此语句可以有两种解释:
NULL
和NULL
不允许NULL
和NULL
很好,但是不允许StackOverflow
和StackOverflow
由于MySQL遵循第二种解释,因此NULL
约束列中允许多个UNIQUE
值。其次,如果您试图理解SQL中NULL
的概念,则会发现两个NULL
值可以进行比较,因为SQL中的NULL
是指不可用或未分配的值(您不能一无所有比较)。现在,如果在NULL
约束列中不允许多个UNIQUE
值,则表示SQL中NULL
的含义已被压缩。我会总结我的回答:
MySQL支持UNIQUE约束,但不以忽略NULL为代价 值