Hvis du har dubletter i din tabel, og du bruger
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
forespørgslen mislykkes med fejl 1062 (dubletnøgle).
Men hvis du bruger IGNORE
-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
dubletterne vil blive fjernet. Men dokumentationen angiver ikke, hvilken række der skal beholdes:
Hvis din version er 5.7.4 eller nyere - kan du:
- Kopiér dataene til en midlertidig tabel (det behøver teknisk set ikke at være midlertidigt).
- Trunker den oprindelige tabel.
- Opret det UNIQUE INDEX.
- Og kopier dataene tilbage med
INSERT IGNORE
(som stadig er tilgængelig).
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;
Se også:INDSÆT ... VÆLG syntaks og Sammenligning af IGNORE-søgeordet og Strenge SQL-tilstand