首页 >数据库 >mysql教程 >MySQL InnoDB 中外键列可以接受 NULL 值吗?

MySQL InnoDB 中外键列可以接受 NULL 值吗?

Barbara Streisand
Barbara Streisand原创
2025-01-11 07:33:51333浏览

Can Foreign Key Columns Accept NULL Values in MySQL's InnoDB?

数据库表列中的外键和 NULL 值

在数据库设计中,外键约束通常用于通过强制执行表之间的关系来确保数据的完整性。但是,问题出现了:具有外键的表列是否允许保存 NULL 值?

如所提供的问题所示,可能存在仅在显式设置值时才需要强制执行外键约束的情况。这允许在最初在外键列中插入具有 NULL 值的记录,同时在填充值后确保数据完整性。

在 MySQL 和 InnoDB 表类型中,确实可以拥有允许 NULL 值的非 NULL 外键。以下示例演示了这一点:

<code class="language-sql">CREATE DATABASE t;
USE t;

CREATE TABLE parent (id INT NOT NULL,
                     PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT NULL,
                    parent_id INT NULL,
                    FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=INNODB;</code>

允许将具有 parent_id 为 NULL 值的记录插入到 child 表中:

<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (1, NULL);</code>

但是,尝试插入 parent_id 值在 parent 表中不存在的记录会导致外键约束冲突:

<code class="language-sql">INSERT INTO child (id, parent_id) VALUES (2, 1);

-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key
-- constraint fails (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY
-- (`parent_id`) REFERENCES `parent` (`id`))</code>

此行为证实 MySQL 和 InnoDB 允许外键列为 NULL 值,并且仅在提供非 NULL 值时才强制执行约束。这符合在外键列填充数据时应强制执行外键约束的预期,同时允许在外键列中使用初始 NULL 值。

以上是MySQL InnoDB 中外键列可以接受 NULL 值吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn