sql – 唯一约束列只能包含一个NULL值
发布时间:2020-12-12 06:53:38 所属栏目:MsSql教程 来源:网络整理
导读:可以在包含NULL的列上创建唯一约束.但是,最多只有一行可能在该列中包含NULL. 我不明白为什么会这样,因为根据定义,NULL不等于另一个NULL(因为NULL实际上是一个未知值,一个未知值不等于另一个未知值). 我的问题: 1.为什么会这样? 2.这是针对MsSQL的吗? 我有
可以在包含NULL的列上创建唯一约束.但是,最多只有一行可能在该列中包含NULL.
我不明白为什么会这样,因为根据定义,NULL不等于另一个NULL(因为NULL实际上是一个未知值,一个未知值不等于另一个未知值). 我的问题: 我有一种预感,因为唯一约束可以充当外键的引用字段,并且如果存在多个具有NULL的记录,则FK否则将不知道它引用的引用表中的哪条记录.但是,这只是一种预感. (是的,我理解UC可以跨多个列,但这不会改变问题;相反,它只会使它复杂化.) 解决方法是的,它是“特定的”Microsoft SQL Server(因为其他一些数据库系统有相反的方法,你期望的那个 – 以及ANSI标准中定义的那个,但我相信还有其他数据库系统与SQL相同服务器).如果您正在使用支持筛选索引的SQL Server版本,则可以应用以下其中一个: CREATE UNIQUE INDEX IX_T ON [Table] ([Column]) WHERE [Column] IS NOT NULL (但请注意,此索引不能成为FK约束的目标) 它的“为什么”真正归结为,它就是很久以前的实施方式(可能是预标准),而现在改变它的那些尴尬局面之一可能会破坏很多现有系统. Re:外键 – 如果不是因为外键列中的NULL值导致不检查外键这一事实你会是正确的 – 没有办法(在SQL Server中)使用NULL作为实际键. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读