记一次线上update数据报错ERROR 1062 (23000): Duplicate entry '1764-336-128-30' for key 'PRIMARY'

  • 记一次线上update数据报错ERROR 1062 (23000): Duplicate entry '1764-336-128-30' for key 'PRIMARY'
  • 有一次领导让我处理一批数据,原因是一个疾病在疾病库出现了两次,要删除一个疾病,并更新其他表对应的疾病id;我写了一批update 语句,但是报错,说主键重复,看到这个错误刚开始我很奇怪,如果主键重复应该是插入的时候就报啊,为什么更新的时候报呢,最后查看了一下表结构
PRIMARY KEY (`a`,`b`,`c`,`d`)

主键用了四列作为主键,但是为什么会导致更新失败呢,这里我举个栗子
t1表中本来有数据
a1 b1 c1 d1 和a1 b1 c1 d2 ,但是d2是脏数据,这个时候我的sql执行 正常来说是

# 把d2改成d1
update t1 set  d=d1 where d=d2 

这样做貌似没有问题,但是确实会更新失败,为什么?
因为如果你的sql 执行成功了会怎么样?
表里面就会有两条数据 a1 b1 c1 d1,而这四列是主键索引,是不能重复的。所以怎么可能会更新成功呢!
那么这个时候应该怎么办呢?很简单,既然正常数据合脏数据都存在了,直接删除掉脏数据就可以了,不用执行更新操作

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容