Als u duplicaten in uw tabel heeft en u gebruikt
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
de query zal mislukken met Error 1062 (dubbele sleutel).
Maar als u IGNORE
gebruikt,
-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
de duplicaten worden verwijderd. Maar de documentatie specificeert niet welke rij zal worden bewaard:
Als uw versie 5.7.4 of hoger is, kunt u:
- Kopieer de gegevens naar een tijdelijke tabel (dit hoeft technisch gezien niet tijdelijk te zijn).
- Knip de originele tabel af.
- Maak de UNIEKE INDEX.
- En kopieer de gegevens terug met
INSERT IGNORE
(die nog steeds beschikbaar is).
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;
Zie ook:INSERT ... SELECT Syntaxis en Vergelijking van het IGNORE-trefwoord en Strikte SQL-modus