移除复合主键字段时触发Error 1062重复条目错误的咨询
解决Error 1062: Duplicate entry '29' for key 'PRIMARY'问题
这个报错的核心原因很明确:你要把PN从复合主键里移除,只留剩下的字段当单一主键,但这个字段里存在重复值(比如值为29的记录不止一条)——主键要求绝对唯一,所以系统直接抛出冲突错误。
给你一套可行的解决步骤:
先找出所有重复数据
假设你要保留的主键字段是ID(替换成你实际的字段名),执行这条SQL查询重复记录:SELECT ID, COUNT(*) AS 重复次数 FROM 你的表名 GROUP BY ID HAVING 重复次数 > 1;执行后会列出所有存在重复的ID值和对应的重复条数。
处理重复数据
这一步得结合你的业务逻辑选方式:- 删除重复记录:如果重复记录是冗余的,保留其中一条即可。比如保留PN值最小的那条,删掉其他重复的ID记录:
要是你的表没有PN以外的区分字段,也可以用主键以外的其他字段(比如创建时间)来判断保留哪条。DELETE t1 FROM 你的表名 t1 JOIN 你的表名 t2 ON t1.ID = t2.ID AND t1.PN > t2.PN; - 合并重复记录:如果重复记录各有有用数据,得先合并再去重。比如把同一ID下的PN值合并成字符串:
合并完成后,再删除重复的ID记录。UPDATE 你的表名 t1 JOIN ( SELECT ID, GROUP_CONCAT(PN SEPARATOR ',') AS 合并后的PN FROM 你的表名 GROUP BY ID HAVING COUNT(*) > 1 ) t2 ON t1.ID = t2.ID SET t1.PN = t2.合并后的PN;
- 删除重复记录:如果重复记录是冗余的,保留其中一条即可。比如保留PN值最小的那条,删掉其他重复的ID记录:
重新修改主键
等所有重复数据处理干净后,再取消勾选PN选项,把目标字段设为单一主键,就能顺利应用更改了。
内容的提问来源于stack exchange,提问作者Jel
相关产品推荐
相关产品推荐

