我有一张带有递归 parent_id 的自引用 MySQL 表:
CREATE TABLE `recursive` (
`id` int(11) NOT NULL auto_increment,
`parent_id` int(11) default NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
KEY `data_categorysource_parent_id` (`parent_id`),
CONSTRAINT `parent_id_refs_id_627b4293`
FOREIGN KEY (`parent_id`) REFERENCES `data_categorysource` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
在测试期间,我想要清空它,但 TRUNCATE 操作失败了:
TRUNCATE `recursive`
/* SQL Error: Cannot delete or update a parent row: a foreign key
constraint fails...
目前我需要手动删除所有记录,从树的底部开始向上工作。 即使是对于小树,这也很繁琐。
有没有简单的解决办法? 我不能轻易地DROP
表并重新创建它,因为其他表引用了它(我已经截断了那些表,因此在这里不应该有数据完整性问题)。
recursive
ORDER BYid
",它将工作正常。然而,如果您有自引用行,那么您几乎没有优雅的选择:http://bugs.mysql.com/bug.php?id=7412。暂时禁用外键是最好的选择。 - Andras Gyomrey