在設計資料庫表時,強制資料完整性至關重要。透過外鍵引用其他表的列在維護這些連接方面起著關鍵作用。一個常見的問題是:具有外鍵的表列是否允許 NULL 值?
在使用 InnoDB 表類型的 MySQL 中,答案是肯定的。您可以將外鍵列聲明為可為空的。此行為允許您在外鍵列中插入具有 NULL 值的新行,但在輸入非 NULL 值時強制執行約束。
為了說明這一點,請考慮以下範例:
<code class="language-sql">CREATE TABLE parent (id INT NOT NULL, PRIMARY KEY (id)); CREATE TABLE child ( id INT NULL, parent_id INT NULL, FOREIGN KEY (parent_id) REFERENCES parent(id) );</code>
現在,讓我們在「child」表中插入一行,其中「parent_id」為 NULL:
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL); -- 查询成功,影响 1 行 (0.01 秒)</code>
此插入操作成功,因為我們為「parent_id」欄位指定了 NULL 值。但是,嘗試插入「parent」表中不存在的非 NULL 值將導致錯誤,因為外鍵約束被強制執行:
<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (2, 1); -- 错误 1452 (23000):无法添加或更新子行:外键约束失败 (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`))</code>
此行為為資料完整性提供了靈活性和控制。您可以在資料填充期間允許臨時 NULL 值,同時仍在以後強制執行外鍵約束。透過仔細管理外鍵列上的 NULL 約束,您可以確保資料的準確性和一致性。
以上是MySQL 外鍵可以允許 NULL 值嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!