我试图在我的数据库中创建文件夹和文件系统。
在删除文件夹 子文件夹的同时,还应该从我的其他表(files_plus)中删除该文件夹中的相应文件。但是如何删除文件夹,它的子文件夹以及文件夹和子文件夹中包含的所有文件?
表:files_plus:
-----------------------------
| id | name | parentid |
-----------------------------
(" parentid"是" id"来自folders_plus表。)
表:folders_plus
我无法想出任何构建查询的方法,那么我将如何设法做到这一点?
答案 0 :(得分:1)
您可以添加外键约束并将其设置为“CASCADE DELETE”,如下所示folders_plus
表。
ALTER TABLE `folders_plus`
ADD INDEX `folders_plus_parentid_idx` (`parentid` ASC);
ALTER TABLE `folders_plus`
ADD CONSTRAINT `fk_folders_plus_id_folders_plus_parentid`
FOREIGN KEY (`parentid`)
REFERENCES `folders_plus` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION;
对于files_plus
表:
ALTER TABLE `files_plus`
ADD INDEX `fk_files_plus_id_folders_plus_parentid_idx` (`parentid` ASC);
ALTER TABLE `files_plus`
ADD CONSTRAINT `fk_files_plus_id_folders_plus_parentid`
FOREIGN KEY (`parentid`)
REFERENCES `folders_plus` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION;
删除父行时,它也会删除所有子行。
确保您的parentid
列可以为空,并且每个顶级目录都为空。每个非空的parentid都必须作为folders_plus
表中的id存在。
PS:请注意,为了使外键约束起作用,您的database storage engine应该是InnoDB。
答案 1 :(得分:0)