+--------+---------+-----------+
| 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引擎。是否可以仅使用一个查询删除行和所有子行?
答案 0 :(得分:1)
不,不是myISAM。如果你在InnoDB中使用约束进行设置,它可能会起作用。
但是通过这样做,您将使用面向表的数据存储来管理分层数据结构。在应用程序中明确地处理这类事情是明智的。
答案 1 :(得分:1)
您需要的是 DELETE TRIGGER
,请参阅MySQL文档中的12.1.11. CREATE TRIGGER Syntax。
触发器无法在触发事件的同一个表上执行操作。我建议您使用预定事件,创建存储过程,或者在处理MySQL的应用程序中处理它。