设为首页 加入收藏

TOP

mysql,sql server,oracle 唯一索引字段是否允许出现多个 null 值?
2015-11-21 01:26:21 来源: 作者: 【 】 浏览:0
Tags:mysql sql server oracle 唯一 索引 是否 允许 出现 多个 null
最近一个项目,涉及到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是一致的,是逻辑自洽的。这样也更加符合实际的业务场景。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一个奇怪的查询结果 下一篇对数据按组排序

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: