位置: 编程技术 - 正文

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)

  • 一般纳税人附加税优惠政策2023
  • 金蝶财务软件年末结账步骤
  • 非货币资产交换和债务重组的区别
  • 年金的扣费标准
  • 个体工商户季度不超过30万免增值税吗
  • 附加税扣款比例
  • 什么叫欠账
  • 工程机械租赁税点
  • 油费可以抵扣进项税额
  • 存根联给了客户怎么办
  • 给退休工人发工资怎么入账
  • 股息红利纳税地点
  • 经营杠杆系数分类
  • 设备款支付比例
  • 理财产品分红怎么入账
  • 数量金额式适用于哪些科目
  • 物业公司代收电费标准
  • 为什么中国没有工业革命
  • 建筑企业在增值税方面新出台的政策
  • 关于7.1号增值税普通发票新规
  • 是不是所有的进口药都不能报销
  • 现金折扣应不应计入成本
  • 在建工程转固定资产后如何计提折旧
  • 中小企业代扣代缴增值税抵扣时限
  • 销售应税消费品应交的消费税分录
  • 附加税费减免性质代码
  • 个体工商户比如
  • 运输公司转包业务怎么开票
  • pc安装苹果系统
  • PHP:pg_connection_reset()的用法_PostgreSQL函数
  • dxva2.dll是什么意思
  • 进货退回的会计处理
  • PHP:date_default_timezone_get()的用法_Date Time函数
  • 预付装修款账务处理
  • mp3格式最高音质
  • 蒙特利尔 攻略
  • 减值准备对方科目不能是固定资产
  • php计算圆的周长和面积代码
  • 刚购入的固定资产怎么算
  • 数学建模赋权
  • Attentional Feature Fusion 注意力特征融合
  • vue3.0动态路由
  • lscpu命令 显示CPU架构信息
  • 有形动产租赁个税是经营所得吗
  • 小微企业免征增值税优惠
  • 网商贷企业贷款条件
  • phpcms默认密码
  • 分成收入计入什么科目
  • 个人去税务局开劳务费怎么开
  • 一般纳税人购入不动产增值税税率
  • 出口佣金账务处理
  • 出口后收不到货款
  • 材料成本差异率是什么意思
  • 主营业务收入借方表示
  • 装修费摊销会计准则
  • 新单位成立需要做什么工作
  • 固定资产净残值最后怎么处理
  • 净现值率和现值指数与净现值什么时候它们评价结果一致
  • 电子发票怎么截屏
  • u盘安装win8.1系统教程
  • xp注册表损坏怎么修复
  • xp怎么改w7
  • windows注册账号
  • fpassist.exe是什么进程 有什么作用 fpassist进程查询
  • angularjs4
  • wmic命令详解
  • 基于python的聊天软件
  • javascript高级程序设计pdf下载
  • node.js 配置
  • android性能优化面试题
  • python发送信息到微信
  • JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
  • js设计模式有哪些
  • jquery增加一行和删除
  • 常规巡察和专项巡察相结合
  • 旧房转让土地增值税扣除项目
  • 广西职称申报系统入口220
  • 如何查看税务登记记号
  • 总公司与分公司签订承包协议
  • 税务稽查团队
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设