如何删除MySQL表中postanski_broj列重复行并设置唯一索引?
解决MySQL表重复邮政编码行并添加唯一索引的方法
第一步:清理重复行,保留唯一记录
先创建临时表存储每个postanski_broj需要保留的ID(这里以保留最大ID为例,若需保留最小ID,将MAX(id)替换为MIN(id)):CREATE TABLE tmp_poste AS SELECT MAX(id) AS keep_id FROM poste GROUP BY postanski_broj;接着删除不在临时表中的重复行:
DELETE FROM poste WHERE id NOT IN (SELECT keep_id FROM tmp_poste);最后删除临时表:
DROP TABLE tmp_poste;第二步:添加唯一索引
此时表内postanski_broj已无重复值,执行以下语句添加唯一索引:ALTER TABLE poste ADD UNIQUE INDEX idx_postanski_br (postanski_broj);报错原因说明
- 第一条语句报错1062:表中存在重复的
postanski_broj值,唯一索引要求列值唯一,因此直接添加会触发冲突报错。 - 第二条语句报错1064:
ALTER IGNORE语法在MySQL 5.7及更高版本已被移除,属于无效语法。
- 第一条语句报错1062:表中存在重复的
可选验证步骤
清理完成后,可执行以下语句确认无重复值:SELECT postanski_broj, COUNT(*) FROM poste GROUP BY postanski_broj HAVING COUNT(*) > 1;若返回空结果,说明重复行已清理完毕。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

