Om du har dubbletter i din tabell och du använder
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
frågan kommer att misslyckas med fel 1062 (duplicerad nyckel).
Men om du använder IGNORE
-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
dubbletterna kommer att tas bort. Men dokumentationen anger inte vilken rad som kommer att behållas:
Om din version är 5.7.4 eller senare - kan du:
- Kopiera data till en tillfällig tabell (det behöver tekniskt sett inte vara tillfälligt).
- Trunkera den ursprungliga tabellen.
- Skapa UNIKA INDEX.
- Och kopiera tillbaka data med
INSERT IGNORE
(som fortfarande är tillgänglig).
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 även:INSERT ... VÄLJ Syntax och Jämförelse av IGNORE-sökordet och Strikt SQL-läge