记一次线上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,而这四列是主键索引,是不能重复的。所以怎么可能会更新成功呢!
那么这个时候应该怎么办呢?很简单,既然正常数据合脏数据都存在了,直接删除掉脏数据就可以了,不用执行更新操作

你可能感兴趣的:(记一次线上update数据报错ERROR 1062 (23000): Duplicate entry '1764-336-128-30' for key 'PRIMARY')