Wenn Sie Duplikate in Ihrer Tabelle haben und Sie
verwendenALTER 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:
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;
Siehe auch:INSERT ... SELECT Syntax und Vergleich des Schlüsselworts IGNORE und Strikter SQL-Modus