首頁 > 資料庫 > mysql教程 > 為什麼 SQLite3 外鍵約束在使用「PRAGMAforeign_keys = ON;」之前似乎無法插入?

為什麼 SQLite3 外鍵約束在使用「PRAGMAforeign_keys = ON;」之前似乎無法插入?

Linda Hamilton
發布: 2025-01-04 18:49:40
原創
949 人瀏覽過

Why Do SQLite3 Foreign Key Constraints Seem to Fail INSERTs Until `PRAGMA foreign_keys = ON;` is Used?

SQLite3 外鍵約束:為什麼INSERT 在沒有引用的情況下會成功

雖然SQLite3 提供了對外鍵約束的支援,但在嘗試插入時會出現問題將記錄寫入子表而不遵守約束。這種神秘的行為可能會讓您感到困惑。

為了解開這個謎團,讓我們檢查一下提供的 SQL 腳本。它建立兩個表:“Persons”和“Orders”,其中“Orders”中的“P_Id”是引用“Persons”中主鍵的外鍵。

將資料插入「Orders」表時,即使「Persons」表為空,插入操作似乎也不會出現錯誤。這是因為 SQLite3.x 中不會自動啟用外鍵約束。

要修正此異常並強制外鍵完整性,每次與SQLite 資料庫建立連線時都必須執行下列「PRAGMA」查詢:

PRAGMA foreign_keys = ON;
登入後複製

透過發出此指令,SQLite3 將嚴格執行所有外鍵約束,防止違反這些約束的插入

這種特性源自於SQLite 與其早期版本SQLite 2.x 的遺留相容性。然而,在 SQLite 4.x 中,外鍵約束將作為預設設定啟用,從而掩蓋了這種奇怪的行為。

以上是為什麼 SQLite3 外鍵約束在使用「PRAGMAforeign_keys = ON;」之前似乎無法插入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板