0

我有树型自引用表。我想使用根元素 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;

我的数据表

在此处输入图像描述 在此处输入图像描述

红色突出显示的是根。当我们删除时,所有孩子都需要被删除。但它没有发生!

还有其他的吗?

4

1 回答 1

0

第一行已经打破了约束,因为它没有父级。如果语句破坏了约束,则处理将立即停止。

如果您尝试删除第一个,这就是为什么不会有任何删除的原因。即使是第一行本身也不会被删除。

避免引用字段中的空值。您可以将其设置为引用自身。我不知道它是否会导致任何其他问题,但它会解决这个问题。;)

于 2013-09-27T07:34:29.970 回答