首页  >  文章  >  数据库  >  唯一索引可以删除具有现有重复项的表中的重复项吗?如何?

唯一索引可以删除具有现有重复项的表中的重复项吗?如何?

Susan Sarandon
Susan Sarandon原创
2024-10-25 08:10:17249浏览

Can a Unique Index Remove Duplicates in a Table with Existing Duplicates, and How?

使用唯一索引去重

为了防止重复数据插入,错误地为字段A、B创建了普通索引, C、D,导致2000万条记录的表中存在重复记录。问题出现了:为这些字段添加唯一索引会在不影响现有字段的情况下删除重复项吗?

更正索引并处理重复

添加唯一索引不带 IGNORE 修饰符的 ALTER TABLE 语句将失败,因为唯一记录已存在。但是,使用 IGNORE 修饰符将删除重复项。

MySQL 版本 5.7.4 及更高版本的替代方法

对于 MySQL 版本 5.7.4 及更高版本,其中不支持 IGNORE 修饰符,建议使用不同的方法:

  1. 将数据复制到临时表。
  2. 截断原始表。
  3. 创建唯一索引.
  4. 使用 INSERT IGNORE 将数据复制回原始表,并丢弃任何重复的行。

使用 INSERT IGNORE 删除重复项的语法

<code class="sql">CREATE TABLE tmp_data SELECT * FROM mytable;
TRUNCATE TABLE mytable;
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
INSERT IGNORE INTO mytable SELECT * FROM tmp_data;
DROP TABLE tmp_data;</code>

其他注意事项

文档没有指定使用 IGNORE 修饰符后将保留哪些重复行。建议先在较小的数据集上进行测试,然后再将解决方案应用于大型表。

以上是唯一索引可以删除具有现有重复项的表中的重复项吗?如何?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn