我正在尝试在数据库中创建文件夹和文件系统。
在删除包含子文件夹的文件夹时,还应该从“我的其他表”(files\u plus)中删除文件夹中的相应文件。但是,我怎样才能同时删除文件夹、它的子文件夹以及文件夹和子文件夹中包含的所有文件?
表:文件加:
-----------------------------
| id | name | parentid |
-----------------------------
(“parentid”是folders\u plus表中的“id”。)
表:文件夹
我想不出任何方法来构造这样做的查询,那么我将如何做到这一点呢?
最佳答案
可以为folders_plus
表添加外键约束并将其设置为“CASCADE DELETE”。
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
列可以为空,并且每个顶级目录都为空。每一个不为null的PARANTED都需要作为ID存在于folders_plus
表中。注意,要使外键约束生效,您的database storage engine应该是InnoDB。
关于mysql - 在使用前一行的ID的同时删除多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45571944/