Mysql
 sql >> Database >  >> RDS >> Mysql

Rimozione dei duplicati con indice univoco

Se hai duplicati nella tua tabella e usi

ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);

la query avrà esito negativo con errore 1062 (chiave duplicata).

Ma se usi IGNORE

-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);

i duplicati verranno rimossi. Ma la documentazione non specifica quale riga verrà conservata:

(Sintassi ALTER TABLE )

Se la tua versione è 5.7.4 o successiva, puoi:

  • Copia i dati in una tabella temporanea (tecnicamente non deve essere temporanea).
  • Tronca la tabella originale.
  • Crea l'INDICE UNICO.
  • E copia nuovamente i dati con INSERT IGNORE (che è ancora disponibile).
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)

Vedi anche:INSERT ... SELECT Sintassi e Confronto tra la parola chiave IGNORE e Modalità SQL rigorosa