Mysql
 sql >> база данни >  >> RDS >> Mysql

Премахване на дубликати с уникален индекс

Ако имате дубликати в таблицата си и използвате

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

заявката ще се провали с грешка 1062 (дублиран ключ).

Но ако използвате IGNORE

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

дубликатите ще бъдат премахнати. Но документацията не посочва кой ред ще бъде запазен:

(ALTER TABLE Синтаксис )

Ако вашата версия е 5.7.4 или по-нова - можете:

  • Копирайте данните във временна таблица (технически не е необходимо да е временна).
  • Отрежете оригиналната таблица.
  • Създайте УНИКАЛЕН ИНДЕКС.
  • И копирайте обратно данните с INSERT IGNORE (което все още е налично).
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 синтаксис)

Вижте също:INSERT ... SELECT Синтаксис и Сравнение на ключовата дума IGNORE и Строг 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. Поддръжка на PDO за множество заявки (PDO_MYSQL, PDO_MYSQLND)

  2. mysqli_real_escape_string и проблем с двойните кавички

  3. Функция MySQL SIGN() – Разберете дали числото е положително или отрицателно в MySQL

  4. Грешка в Mysql datetime DEFAULT CURRENT_TIMESTAMP

  5. Създайте MySQL съхранена функция с динамичен брой аргументи