如果您正在處理錯誤:“違反完整性約束:無法添加或更新子行:外鍵約束失敗”,那麼您在正確的文章中。
通常,當您在表中新增列並將其聲明為外鍵時,您會遇到此錯誤。
在 SQL 資料庫中,外鍵是表中的一個字段,用於在另一個表中的資料之間建立連結。考慮下面的客戶表。
現在您想要將您的客戶連結到一個群組。首先,您應該將新欄位新增至包含對組表的參考的客戶表:
您可以新增外鍵約束來啟動與組表的關係:
當您在customers表上執行此變更操作時,資料庫將驗證group_id欄位中的ID是否存在於groups表中。
在此檢查期間,資料庫將引發“完整性違規錯誤”,因為 group_id 欄位仍然為空,因此它不包含 groups 表中的任何有效參考。因此 SQL 引擎無法嘗試套用外鍵約束。這是因為空值不是 groups 表的有效外鍵。
最簡單的操作是將新欄位宣告為可為空。
您可以從alter查詢中刪除「NOT NULL」指令,以允許group_id列包含空值。
這個簡單的更改將首先解決問題,因為現在外鍵也可以為空。您可以執行資料移轉以最終填入客戶表中的新group_id列,並規劃新版本以重新引入「NOT NULL」約束。
如果在您的應用程式中,如果沒有特定的群組,客戶就不能存在,您應該記住,讓 group_id 可以為空,您的資料庫不會意識到此約束。
如果您在應用程式中建立實體時犯了錯誤,資料庫不會提醒您。
另一個解決方案是在新增列的alter查詢和新增外鍵的alter查詢之間新增資料遷移作業。
在客戶表中獲得新的 group_id 欄位後,您可以執行腳本,使用 groups 表中的有效 ID 填入現有行的此列。
這是執行此任務的查詢範例:
在現代應用程式中,所有這些任務都是使用遷移工具執行的。它通常在大多數常見的應用程式開發框架中可用。
在下面的範例中,我將向您展示如何使用 Laravel 遷移來處理完整性約束違規問題。
建立遷移:
您可以將遷移分為兩部分,如下所示:
如果您對提高資料庫效能感興趣,可以看看下面關於「智慧型資料庫查詢」的文章:
https://inspector.dev/how-to-accelerate-application-performance-with-smart-sql-queries/
Inspector 是一款專為軟體開發人員設計的程式碼執行監控工具。您不需要在伺服器層級安裝任何東西,只需安裝composer 套件就可以開始了。
與其他複雜的一體化平台不同,Inspector 超級簡單,並且對 PHP 友善。您可以嘗試我們的 Laravel 或 Symfony 套件。
如果您正在尋找有效的自動化、深入的見解以及將警報和通知轉發到訊息傳遞環境的能力,請免費嘗試 Inspector。註冊您的帳戶。
或在網站上了解更多:https://inspector.dev
以上是[已解決] 完整性約束違規 – 快速提示的詳細內容。更多資訊請關注PHP中文網其他相關文章!