Maison > base de données > tutoriel mysql > Comment résoudre les erreurs « Échec de la contrainte de clé étrangère » dans MySQL ?

Comment résoudre les erreurs « Échec de la contrainte de clé étrangère » dans MySQL ?

Patricia Arquette
Libérer: 2024-12-28 09:21:11
original
331 Les gens l'ont consulté

How to Resolve

Résolution de l'erreur « Échec de la contrainte de clé étrangère » dans MySQL

Lors de l'ajout d'une clé étrangère à une table existante qui en référence une autre, il est crucial de s'assurer que les lignes référencées existent dans la table parent. Sinon, l'erreur « Impossible d'ajouter ou de mettre à jour une ligne enfant : une contrainte de clé étrangère échoue » peut se produire.

Dans le cas fourni, vous essayez d'ajouter une clé étrangère (sourcecode_id) dans la table sourcecodes_tags qui fait référence le tableau des codes sources. Cependant, d'après vos requêtes SHOW CREATE TABLE, il semble qu'aucune clé étrangère n'est définie sur la table sourcecodes_tags faisant référence à la table des codes sources.

Le message d'erreur indique qu'il y a une violation de clé étrangère, ce qui signifie qu'un certain sourcecode_id les valeurs de la table sourcecodes_tags n'existent pas dans la table sourcescodes. Pour résoudre ce problème, vous devez identifier et supprimer ces enregistrements orphelins.

Identification des enregistrements orphelins

Pour rechercher les valeurs sourcecode_id qui n'existent pas dans la table des codes sources, vous pouvez utiliser la requête suivante :

SELECT DISTINCT sourcecode_id 
FROM sourcecodes_tags tags 
LEFT JOIN sourcecodes sc ON tags.sourcecode_id=sc.id 
WHERE sc.id IS NULL;
Copier après la connexion

Cette requête renverra les valeurs sourcecode_id qui ne sont associées à aucune ligne dans la table des codes sources.

Suppression des enregistrements orphelins

Une fois que vous avez identifié les enregistrements orphelins, vous pouvez les supprimer à l'aide d'une 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
);
Copier après la connexion

Après avoir supprimé les enregistrements orphelins, vous devriez pouvoir ajouter la contrainte de clé étrangère sans aucun problème.

ALTER TABLE sourcecodes_tags 
ADD FOREIGN KEY (sourcecode_id) 
REFERENCES sourcecodes (id) 
ON DELETE CASCADE ON UPDATE CASCADE;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal