位置: 编程技术 - 正文

MySQL中的唯一性约束与NULL详解(mysql设置唯一值)

编辑:rootadmin

推荐整理分享MySQL中的唯一性约束与NULL详解(mysql设置唯一值),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql数据唯一性,mysql唯一标识,mysql唯一键和唯一索引,mysql设置唯一值,mysql唯一键和唯一索引,mysql唯一性索引,mysql设置唯一值,mysql字段唯一,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

之前做的一个需求,简化描述下就是接受其他组的 MQ 的消息,然后在数据库里插入一条记录。为了防止他们重复发消息,插入多条重复记录,所以在表中的几个列上加了个唯一性索引。

这时 A,B,C 三列都是不允许 NULL 值的,唯一性约束也是 work 的。

后来由于需求的变化,修改了以前的唯一性约束,又多加了一列。(至于为什么加就不赘述了)。

新加的 D 是类型是 datetime, 允许为 NULL,默认值为 NULL。之所以默认值为 NULL,是考虑到不是所有记录都有这个时间的, 如果强行设置一个 Magic Value (比如'-- ::‘)当做默认值,看起来很奇怪。

蓝后。。。就出问题了。加了 D 之后,唯一性约束基本就失效了。

MySQL中的唯一性约束与NULL详解(mysql设置唯一值)

上面的三条 SQL 都是可以执行成功的,数据库中会有多条一样的记录。可按照我们以前的构想,在执行后两条 SQL 时 应该抛出 ‘Duplicate key' 的异常的。

后来查了一下,才发现其实 MySQL 官方文档上已经明确说了这一点, 唯一性索引是允许多个 NULL 值的存在的:

从下表中也可以看出来不管是采用什么类型的存储引擎,在建立 unique key 的时候都是允许多个 NULL 存在的。。。。

细想想,其实也蛮合理,毕竟在 MySQL 中认为 NULL 代表着“未知”。 在 SQL 中,任何值与 NULL 的比较返回值都是 NULL 而不是 TRUE, 就算 NULL 与 NULL 的比较也是返回 NULL。

所以只能 fix 了。。。解决办法也蛮简单粗暴的,直接把线上数据刷了一遍,将“-- ::”作为默认值,然后把那列改为不允许为 NULL 的了,咳咳。

MySQL 官网上也有蛮多人讨论过这个问题,一部分人认为这是 MySQL 的 bug, 另一部分则认为是一个 feature,附上链接。

MySQL Bugs: #: unique index allows duplicates with null values

总结

标签: mysql设置唯一值

本文链接地址:https://www.jiuchutong.com/biancheng/349360.html 转载请保留说明!

上一篇:MySQL数据库操作的基本命令(mysql数据库操作题)

下一篇:Mac下安装mysql5.7.18的详细步骤(mac下安装python)

  • 房地产增值税税率是多少
  • 专利年费滞纳金计入什么科目
  • 工资申报是当月申报当月的吗
  • 电子税务局没有发票开具
  • 购销金额多少的情况下必须需要签合同?
  • 收支平衡表excel怎么做
  • 审计调整分录做在哪一年
  • 取用备用金要188分
  • 企业所得税成本费用大于发票金额的原因
  • 化工原材料销售挣钱吗
  • 维修汽车费用
  • 专用基金计入什么科目
  • 核定征收企业怎么申报
  • 异地施工增值税发票如何开具
  • 不能抵扣的进项发票怎么做分录
  • 物业管理企业主营业务收入
  • 发票抵扣联什么时候用
  • 无法读取金税盘时间版本号是什么意思
  • 公司奖励旅游算休年假吗
  • 金蝶哪个版本最好
  • 固定资产折旧计提完毕怎么处理
  • 公司为员工承担房租
  • 哪些行业可以加计抵扣进项税
  • 税务局备案的企业是什么
  • 劳务外包收入公式是什么
  • 存货跌价准备计提原则
  • 境内单位和个人将船舶出租到境外的,不征收车船税
  • 新税法中工资薪金的规定
  • 公司股权转让的印花税谁来承担
  • 商会账目
  • win11系统未激活
  • php实验二
  • 政府会计制度固定资产折旧哪个月开始计提
  • 企业房产税如何计算方法
  • fetchall的用法
  • 圆顶山遗址
  • 还贷款利息会计怎么做账
  • php怎么输出文字
  • 往境外支付培训费怎么退
  • thinkphp3.0
  • uni-app是干嘛的
  • ai训练流程
  • 股权转让协议受让方应注意
  • Monaco-editor的JSONSchema配置及使用介绍
  • 织梦开发教程
  • 材料已经入库但是没有发票怎么做账
  • 2022年山东省固定资产投资额
  • 购买商品的会计科目
  • 顶账资产入账依据
  • 营业税金及附加税率
  • 进口代理费取费标准
  • 验资户和基本户账号一致么
  • 金税盘服务费可以抵扣增值税进项税额吗
  • 对公账户可以取钱出来吗
  • 建筑企业业务招待费
  • 领导出差差旅费怎么报销
  • 利润表的编制方法和步骤实操
  • sql语句中having是什么意思
  • window7临时文件
  • win10电脑系统配置
  • linux命令总结
  • linux怎么vi
  • 禁用windows installer没有用
  • mom.exe是什么程序
  • win10 ex4
  • win7的打开方式在哪里
  • 基于stm32的100个毕业设计
  • Animation.setFillAfter and Animation.setFillBefore的作用
  • 爱家保障行动
  • 基于python的设计
  • unity 动态壁纸
  • vue中的event
  • 树的python
  • python有没有二维数组
  • 对python变量的理解
  • 江西税务局官网登录
  • 江西省国家税务局
  • 怎么查了?
  • 北京市国家税务局网站官网
  • 小规模纳税人的增值税怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设