我有一个包含嵌套类别的表.我想避免在同一级别的项目上重复名称(即具有相同父级的类别).我来这里:
CREATE TABLE `category` (
`category_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`category_name` varchar(100) NOT NULL,
`parent_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`category_id`),
UNIQUE KEY `category_name_UNIQUE` (`category_name`,`parent_id`),
KEY `fk_category_category1` (`parent_id`,`category_id`),
CONSTRAINT `fk_category_category1` FOREIGN KEY (`parent_id`) REFERENCES `category` (`category_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci
不幸的是,category_name_UNIQUE没有强制执行我的根级别类别规则(parent_id为NULL的规则).有合理的解决方法吗?
解决方法:
合理的解决方法可能包括
>如果更新/插入操作对速度不重要,则使用触发器检查约束
>使用某种特殊值来表示null;这可以相对正确地建模 – 具有永远不会被删除的id为0的根节点,具有parent_id DEFAULT 0和ON DELETE SET DEFAULT
标签:mysql,innodb
来源: https://codeday.me/bug/20190526/1158752.html