Mysql
 sql >> Base de données >  >> RDS >> Mysql

Suppression des doublons avec un index unique

Si vous avez des doublons dans votre table et que vous utilisez

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

la requête échouera avec l'erreur 1062 (clé en double).

Mais si vous utilisez IGNORE

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

les doublons seront supprimés. Mais la documentation ne précise pas quelle ligne sera conservée :

(Syntaxe ALTER TABLE )

Si votre version est 5.7.4 ou supérieure, vous pouvez :

  • Copiez les données dans une table temporaire (il n'est techniquement pas nécessaire qu'elle soit temporaire).
  • Tronquer le tableau d'origine.
  • Créer l'INDEX UNIQUE.
  • Et recopiez les données avec INSERT IGNORE (qui est toujours disponible).
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;

(INSÉRER la syntaxe)

Voir aussi :INSERT ... SELECT Syntaxe et Comparaison du mot clé IGNORE et Mode SQL strict