位置: 编程技术 - 正文

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)

  • 个人所得税应纳税额怎么计算
  • 预提费用
  • 个人劳务报酬所得税率表
  • 住房租金专项附加
  • 待处理财产损益年底怎么处理
  • 土地入固定资产还是无形资产
  • 由第三方代付款开票给对方合规吗
  • 加计扣除声明在哪里签章有效
  • 自产商品用于在哪个科目
  • 出口退税逾期申报,需申报出口货物收汇情况表
  • 增值税包括哪些税种
  • 固定资产清理是备抵账户吗
  • 怎么确认外购存货成本?
  • 增值税普票跨月怎么冲红
  • 商品买一送一是打五折吗
  • 首次购买税控设备政策
  • 公司发年终奖怎么发朋友圈
  • 印花税计算公式例子
  • 工会发票开了专票怎么办
  • 税金是否可以不计提呢?
  • 印刷费怎么开发票
  • 关联企业借款利息扣除
  • 代开专票需要去报税吗?
  • 工程施工企业人力资源管理
  • 银行定期存款的利息是每个月给你吗
  • 销售库存商品的记账凭证
  • 修缮房屋的防水工程的账务处理?
  • 企业工商年报填错了怎么办
  • 苹果macOSBigSur是什么型号
  • 鸟瞰视野
  • 服装制造业现状和发展趋势
  • 财政补贴的内容分类
  • 2023年最新最全税率表
  • 应交税费应交增值税销项税额
  • 企业所得税汇算清缴时间
  • 应付票据贴现是负债吗
  • Python数学建模三剑客
  • c语言中数组怎么用
  • python最小正整数
  • 预付卡发票如何开
  • 商业承兑汇票如何追索
  • 股权转让 开票
  • 普票要盖发票的章子吗
  • sql server single user
  • 开票金额为什么是负数
  • 公司买车可以抵扣企业所得税吗
  • 机票报销是什么发票
  • 住宿费开专票怎么做账
  • 单位内部食堂怎么举报
  • 印花税 不足
  • 发票抵扣联要放入凭证里吗
  • 建筑企业合理避税
  • 小规模一季度不超过30万是不含税吗
  • 旅游费的发票可以进成本吗?
  • 工程施工会计科目及账务处理
  • 建账的基本要求
  • 用mysql的小技巧
  • 在mysql中使用视图的限制
  • windows8出现蓝屏
  • ubuntu18虚拟机
  • linux虚拟机基本操作
  • bois开启usb功能
  • win10商店是什么
  • 快速查看浏览的英语短语
  • win7系统电脑卡住了怎么办
  • win7如何打开命令窗口
  • win7系统自带的截屏工具怎么打开
  • Metaio in Unity3d 教程--- 二. 创建自己的Application
  • javascript零基础
  • bat批量命名
  • python编程快速
  • Unity3d C# HttpWebRequest 异步下载文件
  • javascript学习指南
  • 沈阳税务局兑奖中心在哪
  • 财政拨款是否需交税
  • 汽车购置税退税需要多长时间
  • 企业所得税纳税申报表A类
  • 安徽增值税普通发票税率1%
  • 资源税原矿和选矿的区别
  • 综合所得税包括哪些内容
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设