MySQL: ALTER IGNORER TABLEAU donne “l'Intégrité de la violation de la contrainte”
Je suis en train de supprimer les doublons d'une table MySQL à l'aide de ALTER IGNORER TABLE + une CLÉ UNIQUE. La documentation de MySQL dit:
IGNORER est une extension MySQL de la norme SQL. Il contrôle la façon dont réagit si il y a des doublons sur les clés uniques dans la nouvelle table ou si les avertissements se produire lorsque le mode strict est activé. Si l'IGNORER n'est pas spécifié, la copie est annulée et restauré lorsque vous double-clés des erreurs se produisent. Si l'IGNORER est spécifiée, seule la première ligne est utilisé pour les lignes avec des doublons sur une clé unique. L'autre conflit lignes sont supprimées. Des valeurs incorrectes sont tronqués correspondant le plus proche valeur acceptable.
Lorsque j'exécute la requête ...
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)
... J'ai toujours l'erreur #1062 - Duplicate entry 'blabla' for key 'dupidx'.
Vous devez vous connecter pour publier un commentaire.
La
IGNORE
mot-clé extension MySQL semble avoir un bug dans la version InnoDB sur certaines version de MySQL.Vous pouvez toujours, convertir au format MyISAM, IGNOREZ-AJOUTER l'index et ensuite de les convertir en arrière pour InnoDB
Remarque, si vous avez des contraintes de Clés Étrangères cela ne fonctionne pas, vous devrez supprimer ces premiers, et les ajouter plus tard.
set session old_alter_table=1;
Cela a fonctionné pour moi.Ou essayer set session old_alter_table=1 (N'oubliez pas de lui!)
Voir: http://mysqlolyk.wordpress.com/2012/02/18/alter-ignore-table-add-index-always-give-errors/
old_alter_table
réglage de ne pas répliquer, de sorte que leALTER TABLE IGNORE
échouera sur l'esclave et le saut de la réplication. Pour résoudre ce problème, j'ai effectué leALTER
manuellement sur l'esclave, alors sauté la délinquanceALTER TABLE
en utilisantSET GLOBAL sql_slave_skip_counter = 1
, puis reprise de la réplication.Le problème, c'est que vous avez des données dans le domaine que vous essayez d'index. Vous aurez besoin de retirer le contenu litigieux doublons avant de pouvoir ajouter un index unique.
Une façon est de faire ce qui suit:
cela vous permet d'insérer seulement l'unique des données dans la table