Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Entfernen von Duplikaten mit eindeutigem Index

Wenn Sie Duplikate in Ihrer Tabelle haben und Sie

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

die Abfrage schlägt mit Fehler 1062 (doppelter Schlüssel) fehl.

Aber wenn Sie IGNORE verwenden

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

die Duplikate werden entfernt. Aber die Dokumentation gibt nicht an, welche Zeile beibehalten wird:

(ALTER TABLE-Syntax )

Wenn Ihre Version 5.7.4 oder höher ist, können Sie:

  • Kopieren Sie die Daten in eine temporäre Tabelle (technisch muss sie nicht temporär sein).
  • Die ursprüngliche Tabelle abschneiden.
  • Erstellen Sie den EINZIGARTIGEN INDEX.
  • Und kopieren Sie die Daten mit INSERT IGNORE zurück (der noch verfügbar ist).
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)

Siehe auch:INSERT ... SELECT Syntax und Vergleich des Schlüsselworts IGNORE und Strikter SQL-Modus