」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 唯一索引可以刪除具有現有重複項的表中的重複項嗎?

唯一索引可以刪除具有現有重複項的表中的重複項嗎?

發佈於2024-11-08
瀏覽:200

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 以上版本的替代方法
  1. 對於MySQL 版本5.7.4 及以上版本,其中不支援IGNORE 修飾符,建議使用不同的方法:
  2. 將資料複製到暫存文件表。
  3. 截斷原始表。
建立唯一索引。

使用 INSERT IGNORE 將資料複製回原始表,丟棄任何重複的行。

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;

建立表格tmp_data SELECT * FROM mytable; 截斷表 mytable; ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D); 插入忽略到 mytable SELECT * FROM tmp_data; DROP TABLE tmp_data;

其他注意事項

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

文件沒有指定使用 IGNORE 修飾符後將保留哪些重複行。建議先在較小的資料集上進行測試,然後再將解決方案應用於大型表。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3