[已解決] 完整性約束違規 – 快速提示

WBOY
發布: 2024-08-17 22:50:09
原創
846 人瀏覽過

如果您正在處理錯誤:“違反完整性約束:無法添加或更新子行:外鍵約束失敗”,那麼您在正確的文章中。

通常,當您在表中新增列並將其聲明為外鍵時,您會遇到此錯誤。

在 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 遷移

在現代應用程式中,所有這些任務都是使用遷移工具執行的。它通常在大多數常見的應用程式開發框架中可用。

在下面的範例中,我將向您展示如何使用 Laravel 遷移來處理完整性約束違規問題。

建立遷移:

雷雷

您可以將遷移分為兩部分,如下所示:

雷雷

如果您對提高資料庫效能感興趣,可以看看下面關於「智慧型資料庫查詢」的文章:
https://inspector.dev/how-to-accelerate-application-performance-with-smart-sql-queries/

督察新人?免費監控您的應用程式

Inspector 是一款專為軟體開發人員設計的程式碼執行監控工具。您不需要在伺服器層級安裝任何東西,只需安裝composer 套件就可以開始了。

與其他複雜的一體化平台不同,Inspector 超級簡單,並且對 PHP 友善。您可以嘗試我們的 Laravel 或 Symfony 套件。

如果您正在尋找有效的自動化、深入的見解以及將警報和通知轉發到訊息傳遞環境的能力,請免費嘗試 Inspector。註冊您的帳戶。

或在網站上了解更多:https://inspector.dev

[Resolved] Integrity constraint violation – Fast tips

以上是[已解決] 完整性約束違規 – 快速提示的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!