使用唯一索引去重
为了防止重复数据插入,错误地为字段A、B创建了普通索引, C、D,导致2000万条记录的表中存在重复记录。问题出现了:为这些字段添加唯一索引会在不影响现有字段的情况下删除重复项吗?
更正索引并处理重复
添加唯一索引不带 IGNORE 修饰符的 ALTER TABLE 语句将失败,因为唯一记录已存在。但是,使用 IGNORE 修饰符将删除重复项。
MySQL 版本 5.7.4 及更高版本的替代方法
对于 MySQL 版本 5.7.4 及更高版本,其中不支持 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中文网其他相关文章!