違反外鍵約束:刪除或更新父行
嘗試從 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中文網其他相關文章!