Se você tiver duplicatas em sua tabela e usar
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
a consulta falhará com o erro 1062 (chave duplicada).
Mas se você usar
IGNORE
-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
as duplicatas serão removidas. Mas a documentação não especifica qual linha será mantida:
(Sintaxe ALTER TABLE )
Se sua versão for 5.7.4 ou superior - você pode:
- Copie os dados em uma tabela temporária (tecnicamente não precisa ser temporária).
- Truncar a tabela original.
- Crie o ÍNDICE ÚNICO.
- E copie os dados de volta com
INSERT IGNORE
(que ainda está disponível).
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;
(INSERIR Sintaxe)
Veja também:INSERT ... SELECT Syntax e Comparação da palavra-chave IGNORE e Modo SQL estrito