Как удалить родителя и его потомков в модели списка смежности? - PullRequest
0 голосов
/ 15 декабря 2011
+--------+---------+-----------+
|   id   | title   | parent_id |
+--------+---------+-----------+
|    1   | Lvl-1   |   null    |
+--------+---------+-----------+
|    2   | Lvl-11  |     1     |
+--------+---------+-----------+
|    3   | Lvl-111 |     2     |
+--------+---------+-----------+
|    4   | Lvl-12  |     4     |
+--------+---------+-----------+

Что я пытаюсь сделать, так это то, что, когда я удаляю строку с идентификатором 1, она удаляет все свои дочерние строки (строки с идентификаторами 2 и 3 в примере таблицы).Строка с идентификатором 2 должна быть удалена, поскольку его parent_id равен 1, а строка с идентификатором 3 должна быть удалена, поскольку ее parent_id равен 2.

Я использую движок MyISAM.Можно ли удалить строку и все дочерние строки одним запросом?

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Что вам нужно, это DELETE TRIGGER, см. 12.1.11. CREATE TRIGGER Syntax из документации MySQL.

Триггеры не могут выполнять операции с той же таблицей, на которой запускается событие. Я бы порекомендовал вам использовать запланированное событие, создать хранимую процедуру или обрабатывать ее в приложении, обрабатывающем MySQL.

1 голос
/ 15 декабря 2011

Нет, не с myISAM.Если вы установите это с ограничениями в InnoDB, это может сработать.

Но, делая это, вы используете ориентированное на таблицу хранилище данных для управления иерархической структурой данных.Было бы разумно явно обращаться с подобными вещами в своей прикладной программе.

...