我有一个电子邮件列,我想保持唯一性。但我也希望它接受空值。这样我的数据库可以有2个空电子邮件吗?
唯一约束的
—
Paulo Coghi-恢复莫妮卡2015年
我有一个电子邮件列,我想保持唯一性。但我也希望它接受空值。这样我的数据库可以有2个空电子邮件吗?
Answers:
是的,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值。
WHERE column IS NOT NULL似乎它不在我的版本的MySQL支持令我失望。有人知道我在哪里看吗?
我不确定作者最初只是在问这是否允许重复值,还是在这里有一个隐含的问题,问“ NULL在使用时如何允许重复值UNIQUE?” 或“如何只允许一个UNIQUE NULL值?”
该问题已得到解答,是的NULL,使用UNIQUE索引时可以有重复的值。
由于我在寻找“如何允许一个UNIQUE NULL值”时偶然发现了这个答案。对于可能在执行此操作时偶然发现此问题的其他任何人,我剩下的答案都是给您的...
在MySQL中,您不能有一个UNIQUE NULL值,但是可以UNIQUE通过插入一个空字符串的值来获得一个空值。
警告:字符串以外的数字和类型可能默认为0或其他默认值。
UNIQUE约束,而是因为NOT NULL约束。我认为这个答案与这个问题无关,因为这个问题专门关于UNIQUE约束的行为。
避免可为空的唯一约束。您始终可以将列放在新表中,使其变为非空且唯一,然后仅在有值时填充该表。这样可以确保对列的任何键依赖关系都能得到正确实施,并避免了可能由null引起的任何问题。