我有一个电子邮件列,我希望它是唯一的。但我也希望它接受空值。我的数据库可以有2个空电子邮件这样做?
nzk0hqpo1#
是的,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
55ooxyrt2#
从the docs开始:"UNIQUE索引允许可包含NULL的列具有多个NULL值"这适用于除BDB之外的所有引擎。
unftdfkk3#
我不确定作者最初是否只是问这是否允许重复的值,或者这里是否有一个隐含的问题在问,“如何在使用UNIQUE时允许重复的NULL值?”或者“如何只允许一个UNIQUENULL值?”问题已经回答了,是的,在使用UNIQUE索引时,可以有重复的NULL值。由于我在搜索“如何允许一个UNIQUENULL值”时偶然发现了这个答案,因此对于其他可能在搜索时偶然发现这个问题的人,我的答案的其余部分是为您准备的...在MySQL中,您不能有一个UNIQUENULL值,但是您可以通过插入空字符串的值来获得一个UNIQUE空值。
UNIQUE
NULL
xxb16uws4#
一个简单的答案是:No, it doesn't说明:根据唯一约束的定义(SQL-92)当且仅当表中没有两行在唯一列中具有相同的非空值时,才满足唯一约束此语句可有两种解释:
No, it doesn't
StackOverflow
由于MySQL遵循第二种解释,因此UNIQUE约束列中允许多个NULL值。其次,如果您尝试理解SQL中NULL的概念,您会发现根本无法比较两个NULL值,因为SQL中的NULL指的是不可用或未赋值的值(你不能将nothing与nothing进行比较)。现在,如果你不允许在UNIQUE约束列中有多个NULL值,那么你就压缩了SQL中NULL的含义。我可以这样总结我的答案:MySQL支持UNIQUE约束,但不以忽略NULL值为代价
nwwlzxa75#
避免可为空的唯一约束。您始终可以将列放入新表中,使其非空且唯一,然后仅在具有值时才填充该表。这可确保正确实施列上的任何键依赖性,并避免空值可能导致的任何问题。
5条答案
按热度按时间nzk0hqpo1#
是的,MySQL允许在一个列中有多个NULL,并且具有唯一的约束。
结果:
55ooxyrt2#
从the docs开始:
"UNIQUE索引允许可包含NULL的列具有多个NULL值"
这适用于除BDB之外的所有引擎。
unftdfkk3#
我不确定作者最初是否只是问这是否允许重复的值,或者这里是否有一个隐含的问题在问,“如何在使用
UNIQUE
时允许重复的NULL
值?”或者“如何只允许一个UNIQUE
NULL
值?”问题已经回答了,是的,在使用
UNIQUE
索引时,可以有重复的NULL
值。由于我在搜索“如何允许一个
UNIQUE
NULL
值”时偶然发现了这个答案,因此对于其他可能在搜索时偶然发现这个问题的人,我的答案的其余部分是为您准备的...在MySQL中,您不能有一个
UNIQUE
NULL
值,但是您可以通过插入空字符串的值来获得一个UNIQUE
空值。xxb16uws4#
一个简单的答案是:
No, it doesn't
说明:根据唯一约束的定义(SQL-92)
当且仅当表中没有两行在唯一列中具有相同的非空值时,才满足唯一约束
此语句可有两种解释:
NULL
和NULL
NULL
和NULL
可以,但StackOverflow
和StackOverflow
不允许由于MySQL遵循第二种解释,因此
UNIQUE
约束列中允许多个NULL
值。其次,如果您尝试理解SQL中NULL
的概念,您会发现根本无法比较两个NULL
值,因为SQL中的NULL
指的是不可用或未赋值的值(你不能将nothing与nothing进行比较)。现在,如果你不允许在UNIQUE
约束列中有多个NULL
值,那么你就压缩了SQL中NULL
的含义。我可以这样总结我的答案:MySQL支持UNIQUE约束,但不以忽略NULL值为代价
nwwlzxa75#
避免可为空的唯一约束。您始终可以将列放入新表中,使其非空且唯一,然后仅在具有值时才填充该表。这可确保正确实施列上的任何键依赖性,并避免空值可能导致的任何问题。