Mysql 如何删除邻接列表模型中的父对象及其子对象?

Mysql 如何删除邻接列表模型中的父对象及其子对象?,mysql,hierarchy,myisam,Mysql,Hierarchy,Myisam,我试图做的是,当我删除id为1的行时,它将删除其所有子行(示例表中id为2和3的行)。应删除ID为2的行,因为其父\u ID为1;应删除ID为3的行,因为其父\u ID为2 我用的是MyISAM引擎。是否可以通过一个查询删除该行和所有子行?否,myISAM不能。如果您在InnoDB中设置了约束,它可能会工作 但通过这样做,您将使用面向表的数据存储来管理分层数据结构。明智的做法是在应用程序中显式处理此类问题。您需要的是一个删除触发器,请参阅MySQL文档 触发器不能在触发事件的同一个表上执行操作。

我试图做的是,当我删除id为1的行时,它将删除其所有子行(示例表中id为2和3的行)。应删除ID为2的行,因为其父\u ID为1;应删除ID为3的行,因为其父\u ID为2


我用的是MyISAM引擎。是否可以通过一个查询删除该行和所有子行?

否,myISAM不能。如果您在InnoDB中设置了约束,它可能会工作

但通过这样做,您将使用面向表的数据存储来管理分层数据结构。明智的做法是在应用程序中显式处理此类问题。

您需要的是一个
删除触发器,请参阅MySQL文档


触发器不能在触发事件的同一个表上执行操作。我建议您要么使用计划事件,创建存储过程,要么在处理MySQL的应用程序中处理它。

查看嵌套集模型,该模型有助于简化对分层数据的SQL操作。@a'r除触发器外,还可以使用任何与此相关的链接,使用纯查询还有其他方法吗?我只是在意识到我对触发器的理解是错误的之后更新了我的答案。依赖dbms机制也会对可移植性产生负面影响。
+--------+---------+-----------+
|   id   | title   | parent_id |
+--------+---------+-----------+
|    1   | Lvl-1   |   null    |
+--------+---------+-----------+
|    2   | Lvl-11  |     1     |
+--------+---------+-----------+
|    3   | Lvl-111 |     2     |
+--------+---------+-----------+
|    4   | Lvl-12  |     4     |
+--------+---------+-----------+