在sql server中的唯一键中有一个空值的目的是什么?

时间:2013-12-26 13:34:34

标签: sql-server database sql-server-2008 sql-server-2012

很多人问我,唯一键中一个空值的优势是什么?

我仍然无法找到该问题的答案

2 个答案:

答案 0 :(得分:0)

unique约束意味着不允许重复的值。因此,拥有一个null值没有错。

仅供参考,在SQL Server 2008及更高版本之后,您可以在具有多个UNIQUE值的列上创建NULL索引。这是使用Filtered Index完成的。


我只是想检查一下@MartinSmith所说的NULL = NULL是不正确的,并且该标准未在SQL Server中应用。因此,经过快速研究后,我发现以下解释证明了他的观点:

  

唯一键约束并不意味着NOT NULL约束   实践。因为NULL不是实际值(它代表缺乏   一个值的值,当比较两行时,两行在a中都是NULL   列,列值不被视为相等。因此,在   命令唯一键唯一标识表中的每一行,NULL   不得使用值。根据{{​​3}}和关系   模型理论,一个唯一的键(唯一约束)应该接受NULL   几行/元组 - 但并非所有RDBMS都实现此功能   正确。

答案 1 :(得分:0)

虽然这个问题征求了推测,但是从实现者的角度来看,有一个NULL值是有意义的事实:在SQL Server用来实现索引的磁盘上的B树结构中, NULL值与任何其他值一样。只要SQL Server的设计人员不决定为NULL值创建特殊情况,这就是您默认 的行为。

能够索引NULL值是有意义的,并且是一个有用的功能。反直觉地可以使用索引来NULLWHERE IndexCol IS NULL