1
假设你有如下表,用来表示分层数据:是否可以在自参考表中的层次数据上使用约束?
+--------+-------------+
| Field | Type |
+--------+-------------+
| id | int(10) |
| parent | int(10) |
| name | varchar(45) |
+--------+-------------+
表是自引用,该parent_id
指id
。
所以,你可能有以下数据:
+----+--------+---------------+
| id | parent | name |
+----+--------+---------------+
| 1 | 0 | fruit |
| 2 | 0 | vegetable |
| 3 | 1 | apple |
| 4 | 1 | orange |
| 5 | 3 | red delicious |
| 6 | 3 | granny smith |
| 7 | 3 | gala |
+----+--------+---------------+
使用MySQL,我想一个(自引用)的外键在数据约束强加给级联的更新,防止删除记录它是否有任何“孩子”。
所以我用下面的:
CREATE TABLE `test`.`fruit` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`parent` INT(10) UNSIGNED,
`name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_parent`
FOREIGN KEY (`parent`)
REFERENCES `fruit` (`id`)
ON UPDATE CASCADE
ON DELETE RESTRICT
)
ENGINE = InnoDB;
据我所知,这应该符合我的要求。 (?和parent
必须默认为空,以允许插入,正确的)
的问题是,如果我更改记录的id
,它不会级联:
Cannot delete or update a parent row: a foreign key constraint fails (`test`.`fruit`, CONSTRAINT `fk_parent` FOREIGN KEY (`parent`) REFERENCES `fruit` (`id`) ON UPDATE CASCADE)
我缺少什么?
随意纠正我,如果我的术语搞砸了......我是新来的约束。