Si tiene duplicados en su tabla y usa
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
la consulta fallará con el error 1062 (clave duplicada).
Pero si usa IGNORE
-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
los duplicados serán eliminados. Pero la documentación no especifica qué fila se mantendrá:
Si su versión es 5.7.4 o superior, puede:
- Copie los datos en una tabla temporal (técnicamente no necesita ser temporal).
- Trunca la tabla original.
- Cree el ÍNDICE ÚNICO.
- Y copie los datos con
INSERT IGNORE
(que todavía está disponible).
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;
Consulte también:INSERT ... SELECT Sintaxis y Comparación de la palabra clave IGNORE y Modo SQL estricto