位置: 编程技术 - 正文

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年第1号
  • 公司购房、售房需要缴纳哪些税?
  • 企业所得税如何缴纳
  • 本年已预缴所得税
  • 常见的审计调整事项
  • 接管财务要对接哪些内容?
  • win11怎么设置桌面显示我的电脑
  • CENTOS7安装报错
  • windows7如何格式化恢复出厂设置
  • 电脑机箱前面耳机的WIN10系统没有声音怎么办
  • 扫码分享到微信
  • PHP:mcrypt_ecb()的用法_Mcrypt函数
  • 应收款余额在借方什么意思
  • 马拉喀什的历史背景
  • php运用
  • phpnow升级php版本
  • viwer.js
  • 员工报销医药费的会计分录
  • 怎么填专项扣除
  • 水果发票税率是几个点
  • 公司帮非公司员工缴税
  • 个税更正申报后可以撤销吗
  • 原材料折价销售怎么算
  • 工程项目开票金额和合同金额统计表
  • 个人所得税数据怎么导入新电脑
  • 印花税已缴税额
  • 总分类账户余额表怎么做账
  • 文件柜质量标准
  • 提取法定盈余公积会影响留存收益吗
  • 跨年取得的发票金额大于暂估金额
  • 先开发票后付款如何记账?
  • 纳税人去税务局办什么
  • 外购商品科目设置
  • 框架合同范文
  • 怎么看发票的凭证号
  • 工程施工科目设置
  • 金蝶银行存款日记账
  • 商品库存明细账
  • mysql 表分区
  • win8系统手机
  • fedora最新版本
  • 主板bios恢复出厂默认设置方法
  • bios密码忘记了要怎么重置
  • 深度u盘装xp系统教程
  • 虚拟机安装苹果电脑
  • linux find命令详解xargs
  • u盘里装pe系统
  • 在windows中如何设置行间距
  • win7系统怎么重置网络
  • windows越狱软件
  • kb4012212安装失败
  • debian与centos详细对比区别
  • win10预览版21390
  • 安装linux系统步骤图解
  • 各种常用的js函数有哪些
  • jquery遍历radio并选中
  • 从零开始学什么技术
  • JavaScript性能优化
  • 北京税务局网上怎么登录
  • 计提税金的公式
  • 定额发票是如何开具的
  • 工会经费收支办法2022新政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设