明明加了唯一索引,为什么还是产生重复数据?

别踩坑!使用MySQL唯一索引请注意 背景 在程序设计中了,我们往往需要确保数据的唯一性,比如在常见的注册模块,我们需要确保一个手机号只能注册为一个账号。这种情况下,我们的程序往往是第一道关卡,用户来注册之前,首先判断这个手机号是否已经注册,如果已经注册则返回错误信息。但是我们不能确保同时有两个人使用同一个手机号注册到我们的系统中,因此这里就需要在更深的层次去确保手机号的唯一性了。不同存储方案,解决方式不一样,这里以MySQL为例,我... 阅读详情

距离上次发稿 已经过去好久了,
开搞,2023第一稿;

在这里插入图片描述
.还原问题现场
前段时间,为了防止商品组产生重复的数据,我专门加了一张防重表。

问题就出在商品组的防重表上。

具体表结构如下:

在这里插入图片描述

为了保证数据的唯一性,我给那种商品组防重表,建了唯一索引:
在这里插入图片描述

根据分类编号、单位编号和商品组属性的 hash 值,可以唯一确定一个商品组。

给商品组防重表创建了唯一索引之后,第二天查看数据,发现该表中竟然产生了重复的数据:

在这里插入图片描述
表中第二条数据和第三条数据重复了。

这是为什么呢?

2.唯一索引字段包含 null
如果你仔细查看表中的数据,会发现其中一个比较特殊地方:商品组属性的 hash 值(model_hash 字段)可能为null,即商品组允许不配置任何属性。

在 product_group_unique 表中插入了一条 model_hash 字段等于 100 的重复数据:
在这里插入图片描述
从上图中看出,mysql 的唯一性约束生效了,重复数据被拦截了。

接下来,我们再插入两条 model_hash 为 null 的数据,其中第三条数据跟第二条数据中 category_id、unit_id 和 model_hash 字段值都一样。
在这里插入图片描述

从图中看出,竟然执行成功了。

换句话说,如果唯一索引的字段中,出现了 null 值,则唯一性约束不会生效。

最终插入的数据情况是这样的:

当 model_hash 字段不为空时,不会产生重复的数据。
当 model_hash 字段为空时,会生成重复的数据。
我们需要特别注意:创建唯一索引的字段,都不能允许为 null,否则 mysql 的唯一性约束可能会失效。

下面的几种不同方案 点击文末跳转原文,这几种思路在不同的业务场景还是值得学习的。

3.逻辑删除表加唯一索引

3.1 删除状态 +1
3.2 增加时间戳字段
3.3 增加 id 字段

  1. 重复历史数据如何加唯一索引?

5.给大字段加唯一索引
5.1 增加 hash 字段
5.2 不加唯一索引
5.3 redis 分布式锁

6.批量插入数据

来源 :https://mp.weixin.qq.com/s/rVAeULuYYoL_50dlTeEydg

使用qt+PaddleOCR做一个OCR软件demo 文章目录使用qt+PaddleOCR做一个OCR软件demo效果展示1 建立环境1.1 vs项目环境1.2 qtcreator项目环境1.2.1 源代码整理1.2.2 依赖项整理如下1.2.3 模型文件如下1.2.4 在.pro文件中设置依赖库的模式1.2.5 pro文件中添加.h和.lib2 在工程代码中添加截图功能2.1 新建截图类并连接信号2.2 QImage转cv::Mat3 在工程代码中集成PaddleOCR3.1 初始化PaddleOCR3.2 修改文字识别类的run函数,增加一个返回结果的值的 阅读详情

相关推荐

深入解析ViT中的RoPE旋转位置编码:原理、实现与视觉应用

本文深入解析了ViT中的RoPE旋转位置编码原理、实现及其在视觉任务中的应用。RoPE通过旋转变换巧妙地将相对位置信息融入注意力计算,解决了传统绝对位置编码外推性差的问题,在图像分类、目标检测及生成任务中展现出更优的泛化能力和灵活性。

alice7model的博客 704

mysql null索引失效 mysql null对索引的影响 (经典)

mysql null索引失效 mysql null对索引的影响

gb4215287的博客 381

图像处理:张量分解在图像处理领域的应用

随着计算机视觉和图像处理技术的快速发展,图像数据呈现出高维、多模态、海量等特点。传统的矩阵分解方法已经无法有效处理这些复杂的图像数据。张量分解作为一种高阶矩阵分解方法,可以很好地捕捉图像数据的高维结构信息,在图像处理领域展现出巨大的应用前景。本节介绍几种常用的张量分解算法,包括高阶SVD(HOSVD)、Tucker-ALS、CP-ALS等。这些算法的核心思想是通过迭代优化的方式,交替更新张量分解的因子矩阵,直到收敛为止。综上所述,本文系统地介绍了张量分解技术在图像处理领域的应用。

AI天才研究院 7102

mysql唯一索引与null

根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不违反唯一约束,所以是合理的,在oracel也是如此。在mysql 的innodb引擎中,是允许在唯一索引的字段中出现多个null值的。有上面的表和数据可以看出,查询多条数据。

qq_43842093的博客 1096

Hermes 教程 05:多 Agent 编排

本文介绍了Hermes v0.13.0中的四种多Agent协作模式:1)delegate_task快速子任务模式,适合2-3个独立并行任务;2)spawn子Agent模式,实现零成本并行多步流水线;3)tmux交互子Agent模式,支持长期自主任务;4)全新Kanban看板系统,提供持久化AI团队协作框架。各模式在隔离级别、时长、工具访问和适用场景上存在差异,其中spawn模式通过独立上下文窗口实现零上下文成本。文章详细说明了每种模式的使用方法、限制条件和典型应用场景,并提供了具体代码示例和可视化流程图。K

程序猿_三产 534

[QMT量化交易小白入门]-十二、QMT回测龙头打首板和连板的策略

class a():passA = a() #创建空的类的实例 用来保存委托状态field_list定义了需要的市场数据字段,而类a用于保存交易状态。

木头大左的博客 4757

MySQL:设置唯一索引还是出现重复数据

一开始delete_id不能为空,设置一个默认值0或1;然后逻辑删除后清空delete_id的值,使其变成null。如果4个字段都设置为唯一索引,那么①的问题就无法解决了,会同时出现多个 id|1|1|0|null 这样的数据。MySQL中:两个值比较会出现:true、false、null 三种情况;①、唯一索引为null时,null和null是不相等的。null和null相比较会出现未知的类型。也就是说使用②方案后①的问题又出现了。②、逻辑删除时,唯一索引冲突。视频说法有点问题,不敢苟同。

好幸运 1137

宇瞳杯安防镜头设计

宇瞳杯安防镜头设计

weixin_72050316的博客 1507

Mysql 索引偶现失效

Mysql 优化 EXPLAIN 主要关注type和key_len 对于type: index<range<ref 等常见的几种类型; 对于range: in 、between、<、>等范围查询最优是range; 对于key_len: 同一个业务SQL也不一定type越好,效果就好,需要理解B+树,看使用到区分度好的索引的个数也很重要,特别是组合索引。 optimizer_trace 索引偶尔失效 对于同一个SQL,有可能在不同的条件下,走的SQL不同,对于慢SQL的排查,如果看起来

qq_30400779的博客 435

【即插即用模块】注意力篇 | TGRS 2025 | SPR:显著性比例协调,注意力聚焦,先抓差异再精准特征融合!

本文提出SPRMamba网络中的显著性比例协调模块(SPR),用于解决遥感变化检测中非显著变化区域的识别难题。该模块通过差异提取→显著性识别→比例融合的三步流程,动态平衡显著与非显著特征表示。SPR包含空间滤波(SF)和上下文记忆(CMM)两个子模块,分别基于统计特征和深度学习自动区分特征差异中的显著性成分。实验表明,SPR能有效抑制背景噪声干扰,提升边缘检测精度,且随着模块数量的增加,模型性能持续改善。该模块计算成本低,可直接嵌入双输入特征融合场景,适用于各类需要动态特征平衡的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 364

Allegro如何把分离的线段变成封闭连续的图形

Allegeo支持把分离的线段变成封闭连续的图形,以下图为例,线段是分离的。Allegro如何把分离的线段变成封闭连续的图形。Find选择other segs 和Lines。Find选择other segs 和Lines。选择shape-compose shape。分离线段已经是连续封闭的shape形式了。框选图形,删除剩下的无用的分离线段。Find选择shapes。鼠标右击选择done。选择delete命令。鼠标右击选择done。

weixin_54787054的博客 6238

明明加了唯一索引,为什么还是产生了重复数据?

前言 前段时间我踩过一个坑:在mysql8的一张innodb引擎的表中,加了唯一索引,但最后发现数据竟然还是重复了。 到底怎么回事呢? 本文通过一次踩坑经历,聊聊唯一索引,一些有意思的知识点。 1.还原问题现场 前段时间,为了防止商品组产生重复的数据,我专门加了一张防重表。 如果大家对防重表,比较感兴趣,可以看看我的另一篇文章 《高并发下如何防重?》,里面有详细的介绍。 问题就出在商品组的防...

程序员小明1024 182

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: 关于重写equals方法引发的不一致
下一篇: kibana导出CSV文件显示乱码解决
凌晨里的无聊人
博客等级 码龄8年 2320粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨里的无聊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值