外部キー制約違反: 「親行を削除または更新できません」
ジョブ レコードを削除すると、「親行を削除または更新できません: 外部キー制約が失敗しました」(#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 サイトの他の関連記事を参照してください。