{{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