如何在邻接列表模型中删除父级及其子级?

时间:2011-12-15 19:18:50

标签: mysql hierarchy myisam

+--------+---------+-----------+
|   id   | title   | parent_id |
+--------+---------+-----------+
|    1   | Lvl-1   |   null    |
+--------+---------+-----------+
|    2   | Lvl-11  |     1     |
+--------+---------+-----------+
|    3   | Lvl-111 |     2     |
+--------+---------+-----------+
|    4   | Lvl-12  |     4     |
+--------+---------+-----------+

我要做的是,当我删除id为1的行时,它将删除所有子行(示例表中id为2和3的行)。应删除ID为2的行,因为其parent_id为1,并且应删除ID为3的行,因为其parent_id为2。

我正在使用MyISAM引擎。是否可以仅使用一个查询删除行和所有子行?

2 个答案:

答案 0 :(得分:1)

不,不是myISAM。如果你在InnoDB中使用约束进行设置,它可能会起作用。

但是通过这样做,您将使用面向表的数据存储来管理分层数据结构。在应用程序中明确地处理这类事情是明智的。

答案 1 :(得分:1)

您需要的是DELETE TRIGGER,请参阅MySQL文档中的12.1.11. CREATE TRIGGER Syntax

触发器无法在触发事件的同一个表上执行操作。我建议您使用预定事件,创建存储过程,或者在处理MySQL的应用程序中处理它。