+--------+---------+-----------+
| 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引擎。是否有可能删除行和所有的子行只有一个查询?
不,myISAM不行。如果你在InnoDB中设置约束,它可能会工作。
但是通过这样做,您使用面向表的数据存储来管理分层数据结构。明智的做法是在应用程序中显式地处理这种事情。
您需要的是
DELETE TRIGGER
,参见12.1.11。
触发器不能在触发事件的同一个表上执行操作。我建议您使用计划事件,创建存储过程,或者在处理MySQL的应用程序中处理它。