1 votes

MySQL - suppression des données qui violent une contrainte d'unicité

Comment supprimer les données qui violent une contrainte d'unicité ?

J'ai une table pour laquelle je voudrais ajouter une contrainte d'unicité. La table contient des données qui violent cette contrainte, et je voudrais les supprimer. Je ne me soucie pas à ce stade de savoir quelles données je perds, mais seulement que les données finales soient bonnes.

Mes premières tentatives ont consisté à utiliser "create table like" pour copier la table, à utiliser "alter table" pour ajouter la clé unique, puis à copier les données de l'ancienne table vers la nouvelle.

Malheureusement, la dernière étape copie toutes les données et ne se plaint pas de l'unicité.

3voto

unutbu Points 222216

Cela ajoutera l'index unique et supprimera les doublons :

ALTER IGNORE TABLE your_table ADD UNIQUE INDEX your_table_index (...);

De les docs :

IGNORE est une extension MySQL de SQL standard. Elle contrôle la façon dont ALTER TABLE fonctionne s'il y a des doublons sur clés uniques dans la nouvelle table ou si des avertissements se produisent lorsque le mode strict activé. Si IGNORE n'est pas spécifié, la copie est interrompue et annulée si des erreurs erreurs de clés dupliquées se produisent. Si IGNORE est spécifié, seule la première ligne est est utilisée pour les lignes comportant des doublons sur un clé unique, les autres lignes en conflit sont supprimées. Les valeurs incorrectes sont tronquées à la valeur acceptable la plus proche la plus proche de la valeur acceptable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X