Pokud máte v tabulce duplikáty a používáte
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
dotaz selže s chybou 1062 (duplicitní klíč).
Ale pokud použijete IGNORE
-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
duplikáty budou odstraněny. Dokumentace však nespecifikuje, který řádek bude zachován:
Pokud je vaše verze 5.7.4 nebo vyšší – můžete:
- Zkopírujte data do dočasné tabulky (technicky nemusí být dočasná).
- Zkrátit původní tabulku.
- Vytvořte UNIQUE INDEX.
- A zkopírujte data zpět pomocí
INSERT IGNORE
(který je stále k dispozici).
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;
Viz také:INSERT ... SELECT syntaxe a Porovnání klíčového slova IGNORE a Přísný režim SQL