Violation de contrainte de clé étrangère : suppression ou mise à jour de lignes parentales
Tenter de supprimer un enregistrement de la table jobs
(la table parent) entraîne une erreur de violation de contrainte de clé étrangère. Le message d'erreur fait référence à la table advertisers
, en particulier à la contrainte advertisers_ibfk_1
, qui lie advertisers.advertiser_id
à jobs.advertiser_id
. Cette dépendance empêche la suppression ou la modification de la ligne parent.
La cause première réside dans le schéma de la base de données :
<code class="language-sql">CREATE TABLE `advertisers` ( `advertiser_id` int(11) unsigned NOT NULL AUTO_INCREMENT, ... PRIMARY KEY (`advertiser_id`), FOREIGN KEY (`advertiser_id`) REFERENCES `jobs` (`advertiser_id`) ); CREATE TABLE `jobs` ( `job_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `advertiser_id` int(11) unsigned NOT NULL, ... PRIMARY KEY (`job_id`) );</code>
La contrainte de clé étrangère dans la table advertisers
exige que chaque advertiser_id
ait une entrée correspondante dans la table jobs
. Si un travail (par exemple, job_id
= 1) est associé à un annonceur (advertiser_id
= 1), la suppression du travail laisse le advertiser_id
dans la table advertisers
orphelin, violant ainsi la contrainte. La base de données bloque cette action pour maintenir l'intégrité des données.
Résoudre la violation de contrainte
Une solution de contournement consiste à désactiver temporairement les vérifications de clés étrangères :
<code class="language-sql">SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checks DELETE FROM `jobs` WHERE `job_id` = 1 LIMIT 1; SET FOREIGN_KEY_CHECKS = 1; -- Re-enable foreign key checks</code>
Cela contourne l'application des contraintes, permettant la suppression. Il est essentiel de réactiver les contrôles par la suite pour restaurer l’intégrité de la base de données. Il s’agit cependant d’une solution temporaire. Une approche plus robuste impliquerait des suppressions en cascade (ON DELETE CASCADE) ou une gestion correcte des données associées dans la table advertisers
avant de les supprimer de jobs
.
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!