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中文網其他相關文章!