sql >> Databáze >  >> RDS >> Mysql

Odstranění duplikátů s jedinečným indexem

Pokud máte v tabulce duplikáty a používáte

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

dotaz selže s chybou 1062 (duplicitní klíč).

Ale pokud použijete IGNORE

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

duplikáty budou odstraněny. Dokumentace však nespecifikuje, který řádek bude zachován:

(syntaxe ALTER TABLE )

Pokud je vaše verze 5.7.4 nebo vyšší – můžete:

  • Zkopírujte data do dočasné tabulky (technicky nemusí být dočasná).
  • Zkrátit původní tabulku.
  • Vytvořte UNIQUE INDEX.
  • A zkopírujte data zpět pomocí INSERT IGNORE (který je stále k dispozici).
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 syntaxe)

Viz také:INSERT ... SELECT syntaxe a Porovnání klíčového slova IGNORE a Přísný režim SQL



  1. Jaký je účel použití OPTION(MAXDOP 1) v SQL Server?

  2. výchozí časové pásmo postgres

  3. Je nějaká škoda při resetování automatického přírůstku?

  4. Jaké je nastavení zobrazení časové části s datem ve vývojáři Oracle PL/SQL?