位置: 编程技术 - 正文

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)

  • 一般纳税人开普票税率是3%还是13%
  • 无合同销售收入怎么算
  • 其他应付款无法支付规定
  • 季度不满30万免增值税如何结转
  • 取得增值税专用发票要算税吗
  • 2021年旅游免费
  • 增值税普通发票查询真伪
  • 个人账户作为公司私账
  • 工程施工购买的标示牌怎么开票给甲方
  • 理财产品增值税纳税人
  • 其他公司代缴社保分录
  • 办公室租金相关法规
  • 预缴企业所得税分录
  • 计提所得税费用会计分录
  • 企业对外投资需要哪些审批
  • 商品期货交易会计核算
  • 应收票据计入应收账款吗
  • 冲上年收入会计分录
  • 缴纳人身意外保险凭证是什么
  • 如何解决win7系统搜不到蓝牙耳机
  • win11重置系统保留我的文件
  • 发票被盗丢失如何处理
  • 重装系统后分辨率1920x1080不见了
  • 为什么WIN10系统打在画面进不去
  • 应税销售额含增值税吗
  • vue解决数据量过大的问题
  • 解决问题
  • 本单位生产的水泥属于
  • 边角料是否计入生产成本
  • 小规模纳税人减半征收的六税两费
  • 劳务报酬所得缴纳税款是公司代缴吗
  • jquery和php
  • php url函数
  • 民间非营利组织如何纳税
  • 出口退税转内销的话如何算发票金额
  • 专票不认证有什么风险
  • 门店有营业执照仓库加工要办营业执照
  • c语言fread函数的用法示例
  • 有收入就要结转成本吗为什么
  • 劳务派遣公司必须有劳务派遣证吗
  • 企业报废车辆如何做账
  • 餐饮服务需要卫生许可证吗
  • 一般纳税人福利费
  • 进口代理费取费标准
  • 成品油发票如何下载库存
  • 开出银行承兑汇票一张用于支付材料采购款
  • 上月财务费用多做了,本月怎么调
  • 营改增税法
  • 快递做账用什么软件
  • 给职工交的商业险是什么
  • 应收利息审计底稿怎么做
  • 发票监制章是什么章图片
  • 在建工程怎么记账
  • 会计的总目标是什么意思
  • 计算机二级考试一年考几次
  • 储存扩展容量
  • win7系统c盘太满了,如何清理
  • 如何安装vista
  • win2003出现各种硬件故障问题时的处理方法
  • win8屏幕显示不全
  • windows 10 周年更新
  • xp软件自动启动
  • Linux下Dr.com(802.1x)拨号上网完美解决方法(Ubuntu)
  • win10怎么打开语言设置
  • ubuntu20.04设置共享文件夹
  • 如何把itunes的音乐导入ipod
  • mac刻录工具
  • centos安装教程详解
  • windows7怎么给电脑加密码
  • android项目打包成jar包
  • python编码函数
  • js 括号函数
  • 天干地支在择时中的应用初探
  • Android: netd中NetlinkManager的简单介绍
  • 一个简单的网页
  • 菜鸟教程javaweb
  • JavaScript中关于模板字符串
  • jQuery Ajax 全局调用封装实例代码详解
  • 四川省税务局2020年4号
  • 发票开具显示获取纳税人基础信息失败,请退出?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设