Erreur : violation de contrainte de clé étrangère – Suppression des lignes parentales
Tenter de supprimer un enregistrement de tâche (par exemple, DELETE FROM jobs WHERE job_id = 1 LIMIT 1;
) entraîne l'erreur #1451 : « Impossible de supprimer ou de mettre à jour une ligne parent : une contrainte de clé étrangère échoue ». Cela se produit parce que la table advertisers
a une clé étrangère faisant référence au jobs
de la table advertiser_id
.
Schéma de base de données :
La base de données comprend ces tables :
advertisers
:
advertiser_id
(clé primaire)name
, password
, email
, address
, phone
, fax
, session_token
advertisers_ibfk_1
référencement jobs.advertiser_id
jobs
:
job_id
(clé primaire)advertiser_id
(clé étrangère)name
, shortdesc
, longdesc
, address
, time_added
, active
, moderated
Résolution : Désactiver temporairement les contraintes de clé étrangère
La solution consiste à désactiver temporairement les vérifications de clés étrangères pour permettre la suppression, puis à les réactiver pour préserver l'intégrité des données :
<code class="language-sql">SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checks DELETE FROM `jobs` WHERE `job_id` = 1 LIMIT 1; -- Delete the problematic job record SET FOREIGN_KEY_CHECKS = 1; -- Re-enable foreign key checks</code>
Cette méthode permet la suppression tout en conservant l'intégrité référentielle globale de la base de données. N'oubliez pas d'examiner attentivement les implications de la désactivation des vérifications de clé étrangère et d'utiliser cette approche uniquement lorsque cela est absolument nécessaire.
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!