sql – 唯一约束列只能包含一个NULL值

前端之家收集整理的这篇文章主要介绍了sql – 唯一约束列只能包含一个NULL值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
可以在包含NULL的列上创建唯一约束.但是,最多只有一行可能在该列中包含NULL.

我不明白为什么会这样,因为根据定义,NULL不等于另一个NULL(因为NULL实际上是一个未知值,一个未知值不等于另一个未知值).

我的问题:
1.为什么会这样?
2.这是针对Mssql的吗?

我有一种预感,因为唯一约束可以充当外键的引用字段,并且如果存在多个具有NULL的记录,则FK否则将不知道它引用的引用表中的哪条记录.但是,这只是一种预感.

(是的,我理解UC可以跨多个列,但这不会改变问题;相反,它只会使它复杂化.)

解决方法

是的,它是“特定的”Microsoft sql Server(因为其他一些数据库系统有相反的方法,你期望的那个 – 以及ANSI标准中定义的那个,但我相信还有其他数据库系统与sql相同服务器).

如果您正在使用支持筛选索引的sql Server版本,则可以应用以下其中一个:

@H_502_18@CREATE UNIQUE INDEX IX_T ON [Table] ([Column]) WHERE [Column] IS NOT NULL

(但请注意,此索引不能成为FK约束的目标)

它的“为什么”真正归结为,它就是很久以前的实施方式(可能是预标准),而现在改变它的那些尴尬局面之一可能会破坏很多现有系统.

Re:外键 – 如果不是因为外键列中的NULL值导致不检查外键这一事实你会是正确的 – 没有办法(在sql Server中)使用NULL作为实际键.

原文链接:https://www.f2er.com/mssql/77572.html

猜你在找的MsSQL相关文章