博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql,sql server,oracle 唯一索引字段是否允许出现多个 null 值?
阅读量:5017 次
发布时间:2019-06-12

本文共 783 字,大约阅读时间需要 2 分钟。

最近一个项目,涉及到sql server 2008,因为业务需求,希望建立一个唯一索引,但是发现在sql server中,唯一索引字段不能出现多个null值,下面是报错信息:

CREATE UNIQUE NONCLUSTERED INDEX weixin_openid_ui ON Users(weixin_openid);因为发现对象名称 'dbo.Users' 和索引名称 'weixin_openid_ui' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止。重复的键值为 (
)。

但是理论而言, null 和 null 值是不相等的,为什么不能出现在 唯一索引字段中呢?

下面是mysql的 innodb 引擎的测试:

可以看到, 在mysql 的innodb引擎中,是允许在唯一索引的字段中出现多个null值的。根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不违反唯一约束,所以是合理的。sql server有点不合理,不知道oracle是否允许在唯一索引的自动中出现多个null值?没有oracle环境,无法测试了。搜索了一下,发现oracle和mysql是一致的,是逻辑自洽的。这样也更加符合实际的业务场景。

Oracle唯一约束中NULL的处理

http://database.ctocio.com.cn/tips/427/8292927.shtml

 

注:

记得在oracle和mysql中 唯一索引和主键索引的一个重要区别就是:唯一索引允许被索引的字段为null,而主键索引不允许主键值为null.

转载于:https://www.cnblogs.com/digdeep/p/4782819.html

你可能感兴趣的文章
CentOs install oracle instant client
查看>>
ANDROID_MARS学习笔记_S01原始版_018_SERVICE之Parcel
查看>>
迅为iTOP-4418开发板兼容八核6818开发板介绍
查看>>
com.fasterxml.jackson.databind.JsonMappingException
查看>>
mui的上拉下载和下拉刷新
查看>>
LeetCode 13 罗马数字转换为int型
查看>>
设计模式学习--结构型
查看>>
JUnit3 结合一个除法的单元测试说明Assert.fail()的用法
查看>>
java 初学者
查看>>
Leetcode4.Median of Two Sorted Arrays两个排序数组的中位数
查看>>
linux实时系统监控工具mpstat
查看>>
【UVa 540】Team Queue
查看>>
JavaWeb学习笔记:Tomcat
查看>>
Oracle数据库中的违规策略规则的修正
查看>>
Advanced Architecture for ASP.NET Core Web API
查看>>
数据结构(一)--线性表
查看>>
排序算法(二)
查看>>
4.4 多线程进阶篇<下>(NSOperation)
查看>>
博客第一天留个脚印
查看>>
ORACLE批量更新四种方法比较
查看>>