mysql - 一个可能为 NULL 值的属性如何仍然引用 MySQL 中的另一个属性

标签 mysql sql database constraints

想象一下描述文件系统中文件夹的 MySQL 表:

folder_id INT,
parent_folder_id INT,
folder_name VARCHAR(64)

我想添加一个约束 'parent_folder_id REFERENCES folder_id' 以确保数据库中没有死链接。

但如果文件夹位于顶层,则没有父文件夹,因此它应该为 NULL。据我所知,约束不允许我插入 parent_folder_id = NULL 的元组。

如何正确设计?

最佳答案

你可以只添加一个外键:

CREATE TABLE `folder` (
    `folder_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    `parent_folder_id` INTEGER UNSIGNED,
    `folder_name ` VARCHAR(64) NOT NULL,
    CONSTRAINT `PK_folder` PRIMARY KEY (`folder_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `folder` ADD CONSTRAINT `FK_folder_parent_folder` 
    FOREIGN KEY (`parent_folder_id`) REFERENCES `folder` (`folder_id`) 
    ON DELETE CASCADE ON UPDATE CASCADE;

parent_folder_idNULL 时,外键约束不会生效。

关于mysql - 一个可能为 NULL 值的属性如何仍然引用 MySQL 中的另一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7525754/

相关文章:

mysql - SQL:Sum 返回 null

sql - 如何对同一个表中三个不同查询的结果求和

database - RESTFul 架构中的唯一约束

mysql - AWS Aurora DB 合并来自多个 SQL 语句的数据

php - 使用选择数据更新查询

php - 无法打开流 : No such file or directory in

sql - 向数据库添加 n 个条目的复杂性

mysql - 使涉及小表和大表的条件 MySQL 连接变得高效

mysql - 您会选择使用悲观锁定的真实示例是什么?

php - 将 YouTube URL 替换为 MySQL PHPMyAdmin 中的嵌入代码