Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Usuwanie duplikatów z unikalnym indeksem

Jeśli masz duplikaty w tabeli i używasz

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

zapytanie zakończy się błędem 1062 (duplikat klucza).

Ale jeśli używasz IGNORE

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

duplikaty zostaną usunięte. Ale dokumentacja nie określa, który wiersz zostanie zachowany:

(Składnia ALTER TABLE )

Jeśli Twoja wersja to 5.7.4 lub nowsza — możesz:

  • Skopiuj dane do tymczasowej tabeli (technicznie nie musi być tymczasowe).
  • Obetnij oryginalną tabelę.
  • Utwórz UNIKALNY INDEKS.
  • I skopiuj dane z powrotem za pomocą INSERT IGNORE (który jest nadal dostępny).
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;

(SKŁADNIA WSTAW)

Zobacz także:INSERT ... SELECT Składnia oraz Porównanie słowa kluczowego IGNORE i Ścisły tryb SQL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć dwie kolumny z automatycznym przyrostem w MySQL?

  2. Automatyczne inkrementowanie id z sekwencją w MySQL

  3. Jak połączyć się z wiersza poleceń systemu Windows do wiersza poleceń mysql?

  4. Spring 3 MVC + MySQL:nie można przechowywać znaku €

  5. WARN SqlExceptionHelper:143 — Błąd SQL:0, SQLState:08S01 — SqlExceptionHelper:144 — Awaria łącza komunikacyjnego