sql >> Base de Datos >  >> RDS >> Mysql

Eliminar duplicados con índice único

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á:

(Sintaxis ALTER TABLE )

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;

(INSERT Syntax)

Consulte también:INSERT ... SELECT Sintaxis y Comparación de la palabra clave IGNORE y Modo SQL estricto