位置: 编程技术 - 正文

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)

  • 农产品加工企业怎样申请营业执照?
  • 小规模纳税人的账务处理
  • 增值税发票丢失最新处理办法
  • 一般纳税人服务费税率
  • 兼营和混合销售的联系
  • 会计没签字出纳付款违法么
  • 增值税零申报触发附加税零申报
  • 外企农业公司
  • 制造费用属于资产类账户吗
  • 印花税不计提是当月交当月吗
  • 总公司分摊的分公司所得税
  • 法人转钱到公户是借款还是投资款
  • 用金税盘怎样认证抵扣
  • 出口发票金额和备注了差了1分钱
  • 个人公司转让协议怎么写
  • 非独立核算的分公司怎么做账
  • 网络信息化服务中心是干嘛的
  • 小规模纳税人亏损交所得税吗
  • 购入工程物资的账务处理
  • 单位住房没有房产证是否可以买卖
  • 资本金结汇资金用途
  • 酒店招募
  • 公司没成本票怎么暂估
  • 担保贷款造成的损失可以税前扣除吗?
  • 收到银行存款利息记账凭证怎么写
  • win11系统的电脑中拷贝到U盘中的文件没有了怎么解决
  • macbook自带的游戏
  • 可转换债券具有债权和股权双重特征
  • 票据的追索权与再追索权
  • 个体工商户应申报套餐无增值税吗
  • 累计盈余科目怎么填
  • 企业票据贴现费怎么算
  • 苹果客服人工24小时
  • 长期债券投资减少是计入贷方吗?
  • nullable object must have a value
  • 使用的英文
  • 二次封装机
  • 大数据热点话题
  • 前端技巧
  • 民间非营利组织如何纳税
  • 存货报废如何处理方案
  • 托收的收款人是谁
  • 退货可以开红字发票吗
  • 财务f/p是什么意思的缩写
  • 帝国cms如何使用
  • dedecms使用教程
  • 消费税算不算运费
  • 个人出租房屋需要缴纳个税吗
  • 金税四期对企业影响
  • 为什么车船税没有发票
  • 接待客户的旅游活动
  • 购建固定资产属于投资活动吗
  • 应收账款有什么
  • 未开票收入如何纳税申报
  • 自然人独资公司税收政策
  • 零售商品销售的具体核算步骤
  • mysql根据时间查询最新一条数据
  • mysql 绿色
  • mysql允许字段为空
  • win2000系统安装教程
  • vcspawn.exe
  • win8无法完成更新正在撤销更改怎么办
  • win8 chkdsk
  • win7系统玩暗黑2怎样全屏
  • unity 3d数学
  • jquery 插件编写
  • HttpURLConnection连接 详解
  • android 图像处理
  • javascript常用语法
  • cmd开机启动命令
  • Embedded statement cannot be a declaration or labeled statement
  • python搭建虚拟环境torch
  • wordpress基于什么语言
  • 如何配置centos7
  • 河北省网上税务局电子税务局
  • 税控盘监控信息写盘失败时钟校准
  • 国税备案的作用是什么
  • 如何电子税务局缴纳社保费用
  • 中医药文化进校园活动
  • 威海税务确认平台官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设