带有null的parent不会在自引用表中删除

时间:2013-09-26 21:32:34

标签: mysql relational-database

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

我的数据表

enter image description here enter image description here

红色突出显示为root。当我们删除所有孩子都需要删除。但它没有发生!

还有其他吗?

1 个答案:

答案 0 :(得分:0)

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

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

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