ホームページ > データベース > mysql チュートリアル > ジョブ レコードを削除すると「外部キー制約違反」が発生するのはなぜですか?

ジョブ レコードを削除すると「外部キー制約違反」が発生するのはなぜですか?

Linda Hamilton
リリース: 2025-01-14 16:27:48
オリジナル
177 人が閲覧しました

Why Does Deleting a Job Record Cause a

外部キー制約違反: 「親行を削除または更新できません」

ジョブ レコードを削除すると、「親行を削除または更新できません: 外部キー制約が失敗しました」(#1451) というエラーが発生する可能性があります。これは、jobs テーブルと advertisers テーブル間の外部キー関係が原因で発生します。

外部キー制約を理解する

外部キー制約により、参照整合性が保証されます。 jobs テーブルの advertiser_id 列は、常に advertiser_id テーブル内の有効な advertisers と一致する必要があります。これにより、孤立したレコードが防止されます。 このエラーは、求人レコードが広告主にリンクされている場合に発生し、求人を削除すると未解決の参照が残ることになります。

ソリューション

1.外部キーチェックを一時的に無効にする:

最も簡単な修正は、外部キー チェックを一時的に無効にし、ジョブを削除してから再度有効にすることです。

<code class="language-sql">SET FOREIGN_KEY_CHECKS=0;
DELETE FROM `jobs` WHERE `job_id` = 1 LIMIT 1;
SET FOREIGN_KEY_CHECKS=1;</code>
ログイン後にコピー

このメソッドは制約をバイパスしますが、後でデータ整合性のチェックを再度有効にすることが重要です。

2.カスケード削除の実装:

より堅牢な解決策は、カスケード削除を使用するように外部キー制約を変更することです。これにより、ジョブが削除されると、関連付けられた広告主レコードが自動的に削除されます:

<code class="language-sql">ALTER TABLE `advertisers`
ADD CONSTRAINT `advertisers_ibfk_1` FOREIGN KEY (`advertiser_id`) REFERENCES `jobs` (`advertiser_id`) ON DELETE CASCADE;</code>
ログイン後にコピー

カスケード削除により、一時的な制約の無効化を必要とせずにデータの一貫性が維持されます。 よりクリーンで保守しやすいデータベース設計を実現するには、このアプローチを選択してください。

以上がジョブ レコードを削除すると「外部キー制約違反」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート