我有树型自引用表。我想使用根元素id删除所有子记录。所以我用级联删除添加了自引用约束。当父级具有引用id的某个值时,它可以工作。但是我输入了带有null的根元素,因此它不会被删除。任何的想法。当我们在树视图中删除根时,如何删除所有子记录。
创建表格查询
CREATE TABLE IF NOT EXISTS `_quiz` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`value` varchar(100) DEFAULT NULL,
`type` varchar(20) NOT NULL,
`parent` int(11) DEFAULT NULL,
`created` datetime NOT NULL,
`updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `parent` (`parent`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
ALTER TABLE `_quiz`
ADD CONSTRAINT `_quiz_ibfk_2` FOREIGN KEY (`parent`) REFERENCES `_quiz` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
我的数据表
红色突出显示为root。当我们删除所有孩子都需要删除。但它没有发生!
还有其他吗?
答案 0 :(得分:0)
第一行已经破坏了约束,因为它没有父级。如果语句违反约束,则立即停止处理。
这就是为什么如果您尝试删除第一个删除,则不会有任何删除。即使第一行本身也不会被删除。
避免引用字段中的null。您可以将其设置为引用自身。我不知道它是否会引起任何其他问题,但它会解决这个问题。 ;)