码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-09-05 11:06:56      阅读:144      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!