【发布时间】:2012-03-04 18:59:53
【问题描述】:
我有一个 MySQL 表“文件夹”:
CREATE TABLE IF NOT EXISTS `folders` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`folder_key` varchar(40) NOT NULL,
`parent_key` varchar(40) NOT NULL,
`name` varchar(16) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
我不使用整数 ID,只使用键(字母数字哈希,我已将其替换为单词以使事情更清晰)。所以,folder_key & parent_key 是 SHA-1 哈希(在我的实际应用中)。
INSERT INTO `folders` (`id`, `folder_key`, `parent_key`, `name`) VALUES
(1, 'sun', 'root', '1'),
(2, 'moon', 'sun', '1.1'),
(3, 'jupiter', 'moon', '1.1.1'),
(4, 'mars', 'root', '2');
如您所见,第一项也有一个 parent_key,它是一个根键。
测试用例:
如果我想删除带有folder_key === moon (1.1) 的项目,它还应该删除其子元素,在这种情况下,它是带有folder_key === jupiter (1.1) 的项目.1) 等等...
假设我想删除多个项目,所以我这样做:
DELETE from folders WHERE folder_key IN('moon', 'mars');
执行后,该表应该只有一项folder_key === sun
所以,问题是: 如何使用 MySQL 触发器、ON DELETE CASCADE 或 ... 从具有一个或多个文件夹键(递归)的表中删除项目?
谢谢。
【问题讨论】:
标签: mysql recursion cascading-deletes