外部キー制約違反: 親行の削除または更新
jobs
テーブル (親テーブル) からレコードを削除しようとすると、外部キー制約違反エラーが発生します。 エラー メッセージは、advertisers
テーブル、具体的には advertisers_ibfk_1
を advertisers.advertiser_id
にリンクする jobs.advertiser_id
制約を参照しています。この依存関係により、親行の削除または変更が防止されます。
根本的な原因はデータベース スキーマにあります:
<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>
advertisers
テーブルの外部キー制約により、すべての advertiser_id
が jobs
テーブルに対応するエントリを持つ必要があります。 ジョブ (例: job_id
= 1) が広告主 (advertiser_id
= 1) に関連付けられている場合、ジョブを削除すると advertiser_id
テーブル内の advertisers
が孤立したままになり、制約に違反します。データベースは、データの整合性を維持するためにこのアクションをブロックします。
制約違反の解決
回避策には、外部キーのチェックを一時的に無効にすることが含まれます。
<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>
これにより、制約の適用がバイパスされ、削除が許可されます。 重要なのは、データベースの整合性を復元するには、後でチェックを再度有効にすることが重要です。 ただし、これは一時的な解決策です。 より堅牢なアプローチには、カスケード削除 (ON DELETE CASCADE) または advertisers
.jobs
から削除する前に
以上が外部キー制約違反により親行を削除できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。