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

Fjerner dubletter med unikt indeks

Hvis du har dubletter i din tabel, og du bruger

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

forespørgslen mislykkes med fejl 1062 (dubletnøgle).

Men hvis du bruger IGNORE

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

dubletterne vil blive fjernet. Men dokumentationen angiver ikke, hvilken række der skal beholdes:

(ÆNDRING TABEL Syntaks )

Hvis din version er 5.7.4 eller nyere - kan du:

  • Kopiér dataene til en midlertidig tabel (det behøver teknisk set ikke at være midlertidigt).
  • Trunker den oprindelige tabel.
  • Opret det UNIQUE INDEX.
  • Og kopier dataene tilbage med INSERT IGNORE (som stadig er tilgængelig).
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 syntaks)

Se også:INDSÆT ... VÆLG syntaks og Sammenligning af IGNORE-søgeordet og Strenge SQL-tilstand



  1. Hvad er en korrekt navnekonvention for MySQL FK'er?

  2. MacOS Kan ikke starte MySQL Server

  3. SQLite Omdøb kolonne

  4. Tilføj hurtigt en kopi af en kolonne til en MySQL-tabel