暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

Oracle的唯一索引为什么允许多个null行数据的存在

原创 于志君 2022-04-16
4382

你想过Oracle唯一索引列为什么允许多个null存在吗?
一同事提出oracle中,一个表上有唯一索引,该列上就应该加上非空约束,他应该是在比对数据时遇到了问题,按照唯一索引列去比较,却没有比较出列值为null的数据,想当然的觉得应该让研发改规范,要把唯一索引列上加上非空约束。
我一听这个,这跟我以往使用的经验不符啊,oracle是允许唯一索引列上,多行都是null值的。这个是我做java代码开发时就已知的事实,但当时就觉得数据库就是这样设计的,没去想为什么是这样。我当时就回复了那个同事一下,说数据库的唯一索引就是这样设计的,允许多个null存在,多个null不算重复。
那个同事就给了我举了一个下面这样的一个例子:
image.png

他说你看复合唯一索引时,有一个列为null出现了两次,oracle却认为违反了唯一索引,这不就是认为多个null列也算重复吗,oracle这样处理的是不是有点反常?
于是我就去想了一下oracle这样处理的原因。
什么是唯一索引?
唯一索引是说的唯一索引列的数据唯一还是索引段中存储的索引唯一,这样一想瞬间就明白了,索引唯一当然指的是索引段中存储的索引唯一。
Oracle为什么允许单列唯一索引中数据可以多行为null?
那是因为null的数据不会存入索引啊。
Oracle为什么处理复合唯一索引时,有一个列为null出现了两次,oracle却认为违反了唯一索引约束?
那是因为复合索引列,只要有一列不为空就会存入索引中啊。

果然是理不辨不明,原来没怎么在意的事情,却是没想明白其中真正的道理。

最后修改时间:2022-04-16 09:27:35
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论