加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:53:38 所属栏目:MsSql教程 来源:网络整理
导读:可以在包含NULL的列上创建唯一约束.但是,最多只有一行可能在该列中包含NULL. 我不明白为什么会这样,因为根据定义,NULL不等于另一个NULL(因为NULL实际上是一个未知值,一个未知值不等于另一个未知值). 我的问题: 1.为什么会这样? 2.这是针对MsSQL的吗? 我有
可以在包含NULL的列上创建唯一约束.但是,最多只有一行可能在该列中包含NULL.

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

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

我有一种预感,因为唯一约束可以充当外键的引用字段,并且如果存在多个具有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作为实际键.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读