我正在尝试在数据库中创建文件夹和文件系统。
在删除包含子文件夹的文件夹时,还应该从“我的其他表”(files\u plus)中删除文件夹中的相应文件。但是,我怎样才能同时删除文件夹、它的子文件夹以及文件夹和子文件夹中包含的所有文件?
表:文件加:

-----------------------------
| id  |  name  |  parentid  |
-----------------------------

(“parentid”是folders\u plus表中的“id”。)
表:文件夹
mysql - 在使用前一行的ID的同时删除多行-LMLPHP
我想不出任何方法来构造这样做的查询,那么我将如何做到这一点呢?

最佳答案

可以为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/

10-11 02:49
查看更多