我有一个电子邮件列,我想保持唯一性。但我也希望它接受空值。这样我的数据库可以有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引起的任何问题。