zoukankan      html  css  js  c++  java
  • 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 和 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.

  • 相关阅读:
    【转】SMARTY 不乱码截取中文
    godaddy最新优惠码
    javascript 学习之屏幕尺寸获取。
    IE6 实现minwidth
    css 修改页面选中时背景颜色
    jQuery 闪动的文字提示
    jQuery插件 blockUI
    HTML 5 video 视频标签全属性详解
    linux打包压缩命令汇总
    Windows 下MySQL zip 安装
  • 原文地址:https://www.cnblogs.com/digdeep/p/4782819.html
Copyright © 2011-2022 走看看