Maison  >  Article  >  base de données  >  Pourquoi ALTER IGNORE TABLE entraîne-t-il toujours des violations des contraintes d'intégrité dans MySQL ?

Pourquoi ALTER IGNORE TABLE entraîne-t-il toujours des violations des contraintes d'intégrité dans MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-08 11:22:01921parcourir

Why Does ALTER IGNORE TABLE Still Result in Integrity Constraint Violations in MySQL?

MySQL ALTER IGNORE TABLE provoque une violation de contrainte d'intégrité

La modification d'une table MySQL à l'aide de ALTER IGNORE TABLE pour supprimer les valeurs en double tout en ajoutant une clé unique devrait éviter les erreurs de clé en double. Cependant, les utilisateurs ont rencontré l'erreur « Violation de la contrainte d'intégrité » malgré l'utilisation de l'indicateur IGNORE.

Explication :

La documentation MySQL indique que IGNORE demande à la base de données d'ignorer les doublons. lignes sur des clés uniques lors de l'opération ALTER TABLE. Mais dans certains cas, notamment avec les tables InnoDB, il semble y avoir un bug dans l'extension IGNORE qui entraîne des violations de contraintes d'intégrité.

Solution :

Pour résoudre le problème, envisagez la solution de contournement suivante :

  1. Passer au moteur MyISAM :

    • Exécuter la requête ALTER TABLE table ENGINE MyISAM ; pour convertir la table vers le moteur MyISAM.
  2. Ajouter un index unique avec IGNORE :

    • Exécuter la requête ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (champ); pour ajouter l'index unique tout en ignorant les doublons.
  3. Reconvertir en InnoDB :

    • Une fois l'index ajouté, exécuter la requête ALTER TABLE table ENGINE InnoDB ; pour rétablir la table au moteur InnoDB.

Remarque :

  • Cette solution fonctionnera s'il n'y a pas d'éléments étrangers principales contraintes sur la table. S'il existe des contraintes, elles doivent être temporairement supprimées et rajoutées après les étapes ci-dessus.
  • La solution de contournement devra peut-être être utilisée pour chaque index unique ajouté à la table qui déclenche la violation de la contrainte d'intégrité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn