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

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

Barbara Streisand
发布: 2025-01-11 07:33:51
原创
332 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板