{{tag>app mysql contrainte}} ====== Erreur lors de la création d'une contrainte ====== Lors de la création d'une nouvelle contrainte entre deux tables ayant déjà des enregistrements l'erreur suivante peut se produire: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails La création de la contrainte échoue car il existe des enregistrements pour lesquels la valeur de la clé étrangère n'existe plus dans la table référencée. Remarque: Pour créer des contraintes vérifier que les tables utilisent bien le moteur **InnoDB**. ===== Procédure ===== Plusieurs solution: - désactiver la vérification des contraintes le temps de la requête de création de la nouvelle contrainte. - Recherche les enregistrements provocant l'erreur. ==== Rechercher des enregistrements érronés ==== Dans l'exemple ci-dessous l'erreur se produit lors de la création d'une contrainte entre les tables famille et responsable: ALTER TABLE famille ADD CONSTRAINT famille_id_resp1_responsable_id_resp FOREIGN KEY (id_resp1) REFERENCES responsable(id_resp) ON UPDATE CASCADE ON DELETE SET NULL; Pour retrouver les enregistrements posant problème on utilise les mots clés **NOT IN** avec la syntaxe suivante: SELECT * FROM famille WHERE id_resp1 NOT IN (SELECT id_resp FROM responsable); ===== Références ===== * http://stackoverflow.com/questions/1253459/mysql-error-1452-cannot-add-or-update-a-child-row-a-foreign-key-constraint-fa