我有一张桌子:
CREATE TABLE IF NOT EXISTS `Tree` (
`id` int(10) NOT NULL,
`parent` int(10) DEFAULT NULL,
`text` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `parent` (`parent`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `Tree` (`id`, `parent`, `text`) VALUES
(1, 1, '1'),
(2, 1, '1.1'),
(3, 1, '1.2'),
(4, 1, '1.3');
ALTER TABLE `Tree` ADD CONSTRAINT `tree_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `tree` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Run Code Online (Sandbox Code Playgroud)
执行完以上所有语句后,发现以下问题:
UPDATE `Tree` SET `id` = '10' WHERE `Tree`.`id` = 1
Run Code Online (Sandbox Code Playgroud)
虽然预期更改主ID将parent由于ON UPDATE CASCADE约束而导致所有链接记录自动更新。这些级联的参照完整性约束不是全部吗?
文档说以下(重点是我的):
与SQL标准的偏差:如果递归使用ON UPDATE CASCADE或ON UPDATE SET NULL来更新它在级联期间已更新的同一表,则它的作用类似于RESTRICT。这意味着您不能使用自引用的ON UPDATE CASCADE或ON UPDATE SET NULL操作。这是为了防止级联更新导致无限循环。另一方面,可以使用自引用的ON DELETE SET NULL,也可以使用自引用的ON DELETE CASCADE。级联操作的嵌套深度不得超过15层。
| 归档时间: |
|
| 查看次数: |
3345 次 |
| 最近记录: |