sql >> Databasteknik >  >> RDS >> Mysql

Ta bort dubbletter med unikt index

Om du har dubbletter i din tabell och du använder

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

frågan kommer att misslyckas med fel 1062 (duplicerad nyckel).

Men om du använder IGNORE

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

dubbletterna kommer att tas bort. Men dokumentationen anger inte vilken rad som kommer att behållas:

(ÄNDRA TABELL Syntax )

Om din version är 5.7.4 eller senare - kan du:

  • Kopiera data till en tillfällig tabell (det behöver tekniskt sett inte vara tillfälligt).
  • Trunkera den ursprungliga tabellen.
  • Skapa UNIKA INDEX.
  • Och kopiera tillbaka data med INSERT IGNORE (som fortfarande är tillgänglig).
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 syntax)

Se även:INSERT ... VÄLJ Syntax och Jämförelse av IGNORE-sökordet och Strikt SQL-läge



  1. Så här fixar du:JSON_VALUE Returnerar NULL med långa strängar (SQL-server)

  2. Erbjuder SQL Server något liknande MySQL'S PÅ DUBLIKATNYCKELUPPDATERING

  3. Migrera MySQL till PostgreSQL på AWS RDS, del 4

  4. Hur löser man MySQL-teckenkodningsproblem?