Jika Anda memiliki duplikat di tabel Anda dan Anda menggunakan
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
kueri akan gagal dengan Kesalahan 1062 (kunci duplikat).
Tetapi jika Anda menggunakan IGNORE
-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
duplikat akan dihapus. Tetapi dokumentasi tidak menentukan baris mana yang akan disimpan:
Jika versi Anda 5.7.4 atau lebih tinggi - Anda dapat:
- Salin data ke tabel sementara (secara teknis tidak perlu bersifat sementara).
- Memotong tabel asli.
- Buat INDEKS UNIK.
- Dan salin kembali data tersebut dengan
INSERT IGNORE
(yang masih tersedia).
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;
Lihat juga:INSERT ... SELECT Syntax dan Perbandingan Kata Kunci IGNORE dan Mode SQL Ketat