如何删除MySQL表重复business_id数据并添加唯一约束?
解决MySQL重复记录删除并添加唯一约束的方法
没问题,我来帮你搞定这个MySQL重复记录的问题!要给business_id加上唯一约束,得先清理掉重复的记录,只保留每个business_id对应id最大的那条,具体步骤如下:
1. 先验证要保留的记录(可选但推荐)
先执行这条查询,确认每个business_id对应的最大id是哪些,避免后续删除出错:
SELECT business_id, MAX(id) AS keep_id FROM my_table GROUP BY business_id;
你也可以直接查看将要被删除的记录,确保逻辑正确:
SELECT t1.* FROM my_table t1 JOIN ( SELECT business_id, MAX(id) AS keep_id FROM my_table GROUP BY business_id ) t2 ON t1.business_id = t2.business_id WHERE t1.id != t2.keep_id;
2. 删除重复记录(仅保留最大id的条目)
这里提供两种可靠的写法,任选其一即可:
方法一:使用JOIN删除
DELETE t1 FROM my_table t1 JOIN ( SELECT business_id, MAX(id) AS keep_id FROM my_table GROUP BY business_id ) t2 ON t1.business_id = t2.business_id WHERE t1.id != t2.keep_id;
方法二:使用子查询(需嵌套临时表)
MySQL不允许直接在DELETE的WHERE子查询中引用当前被操作的表,所以需要嵌套一层临时表来规避这个限制:
DELETE FROM my_table WHERE id NOT IN ( SELECT keep_id FROM ( SELECT MAX(id) AS keep_id FROM my_table GROUP BY business_id ) AS temp_table );
重要提示:执行删除操作前,一定要先备份数据,或者用上面的SELECT语句验证要删除的记录,避免误删重要数据!
3. 添加唯一约束
清理完重复记录后,就可以给business_id添加唯一约束了:
ALTER TABLE my_table ADD CONSTRAINT unique_business_id UNIQUE (business_id);
这样后续就不会再出现business_id重复的记录啦!
内容的提问来源于stack exchange,提问作者MMacphail
相关产品推荐
相关产品推荐

