使用唯一索引刪除重複項
如果您有一個包含重複記錄的大表,並且希望透過建立唯一索引來刪除它們,您需要意識到潛在的後果。
如果您嘗試在已包含重複項目的表中新增唯一索引,則操作將因重複鍵錯誤而失敗。這是因為唯一索引強制其包含的資料的唯一性。
但是,有一個解決此問題的方法。建立唯一索引時可以使用 IGNORE 修飾符。這將指示 MySQL 忽略任何重複值,只插入唯一的值。
<code class="sql">ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D) IGNORE;</code>
使用 IGNORE 修飾符將刪除重複項,但需要注意的是,它沒有指定將保留哪一行。 MySQL 將為每個重複項任意選擇一行並丟棄其他行。
如果您使用 MySQL 版本 5.7.4 或更高版本,ALTER TABLE 的 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>
使用 INSERT IGNORE 將忽略任何重複值,只插入唯一的值。一旦插入數據,就可以刪除臨時表。
以上是如何在 MySQL 中使用唯一索引從表中刪除重複項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!