Erreur MySQL 1452 : l'ajout ou la mise à jour d'une ligne enfant échoue en raison d'une contrainte de clé étrangère
Lors de la tentative d'ajout d'une clé étrangère à la table sourcecodes_tags en faisant référence à la table des codes sources, une erreur se produit : "Erreur MySQL 1452 - Impossible d'ajouter ou de mettre à jour une ligne enfant : une contrainte de clé étrangère échoue."
Comprendre le problème
Cette erreur indique généralement que les valeurs sourcecode_id présentes dans la table sourcecodes_tags n'existent pas en tant que valeurs de clé primaire correspondantes ( id) dans le tableau des codes sources. MySQL applique l'intégrité référentielle, garantissant que les clés étrangères font référence à des clés primaires valides dans les tables parentes.
Résoudre l'erreur
Pour résoudre cette erreur, il est nécessaire d'identifier et supprimez les valeurs orphelines sourcecode_id de la table sourcecodes_tags. Exécutez la requête suivante pour rechercher les valeurs de clé primaire manquantes :
SELECT DISTINCT sourcecode_id FROM sourcecodes_tags tags LEFT JOIN sourcecodes sc ON tags.sourcecode_id=sc.id WHERE sc.id IS NULL;
Cette requête renverra une liste de valeurs sourcecode_id qui ne sont pas présentes dans la table des codes sources. Une fois identifiées, ces valeurs orphelines peuvent être supprimées à l'aide de l'instruction DELETE :
DELETE FROM sourcecodes_tags WHERE sourcecode_id IN (SELECT DISTINCT sourcecode_id FROM sourcecodes_tags tags LEFT JOIN sourcecodes sc ON tags.sourcecode_id=sc.id WHERE sc.id IS NULL);
Après avoir supprimé les valeurs orphelines, réexécutez l'instruction ALTER TABLE pour ajouter la clé étrangère :
ALTER TABLE sourcecodes_tags ADD FOREIGN KEY (sourcecode_id) REFERENCES sourcecodes (id) ON DELETE CASCADE ON UPDATE CASCADE;
Cela devrait réussir à créer la contrainte de clé étrangère sans aucune erreur.
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!