首页 > 数据库技术 > 详细

mysql,sql server,oracle 唯一索引字段是否允许出现多个 null 值?

时间:2015-09-05 11:04:13      阅读:894      评论:0      收藏:0      [点我收藏+]

最近一个项目,涉及到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 和 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.

mysql,sql server,oracle 唯一索引字段是否允许出现多个 null 值?

原文:http://www.cnblogs.com/digdeep/p/4782819.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!