sql >> Database >  >> RDS >> Mysql

Duplicaten verwijderen met unieke index

Als u duplicaten in uw tabel heeft en u gebruikt

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

de query zal mislukken met Error 1062 (dubbele sleutel).

Maar als u IGNORE gebruikt,

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

de duplicaten worden verwijderd. Maar de documentatie specificeert niet welke rij zal worden bewaard:

(ALTER TABLE-syntaxis )

Als uw versie 5.7.4 of hoger is, kunt u:

  • Kopieer de gegevens naar een tijdelijke tabel (dit hoeft technisch gezien niet tijdelijk te zijn).
  • Knip de originele tabel af.
  • Maak de UNIEKE INDEX.
  • En kopieer de gegevens terug met INSERT IGNORE (die nog steeds beschikbaar is).
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-syntaxis)

Zie ook:INSERT ... SELECT Syntaxis en Vergelijking van het IGNORE-trefwoord en Strikte SQL-modus



  1. Hoe vind je unieke paren uit twee kolommen in SQL?

  2. Slaapstand tijdstempel met tijdzone

  3. afbeelding insluiten in html e-mail

  4. Python MySQL-connector - ongelezen resultaat gevonden bij gebruik van fetchone