DELETE из разных таблиц одним запросом
Часто встречающаяся ситуация при разработке вэб приложений – как удалить объект из таблицы базы данных и связанные вместе сним объекты, из другой таблицы? Яркий тому пример категории и материалы, пункты меню и их подменю и т.п. Можно, а может и правильно, в таких ситуациях использовать триггеры или даже хранимые процедуры, но как правило PHP программисты не углубляются настолько в дебри SQL, и ваш покорный слуга не исключение. Посмотрим, как можно обойтись простым запросом:
DELETE
`menu`, `submenu`
FROM
`menu`
LEFT JOIN
`submenu`
ON
(`menu`.`id` = `submenu`.`id`)
WHERE
`menu`.`id` = 1;
или несколько объектов и их зависимости:
DELETE
`menu`, `submenu`
FROM
`menu`
LEFT JOIN
`submenu`
ON
(`menu`.`id` = `submenu`.`id`)
WHERE
`menu`.`id` IN(1,2,3,4);
Таким образом удаляем, например, меню и его подменюхи. Или категорию вместе с содержащимися в ней материалами. Главное не забыть спросить у пользователя подтверждения такого необратимого действия. Прелесть этого варианта в том, что здесь либо удаляется всё что нужно, либо ничего – запрос либо выполняется целмком либо не выполняется вообще. Т.е. нет риска удалить родителя, и при какой либо не предвиденной ошибке оставить в базе его взаимосвязанных потомков, тем самым нарушив целостность данных. Такая своеобразная транзакция...
Информация копипастерам
Внимание! Копирование контента с сайта, возможно только с разрешения администратора. Т.е. Меня! Я скорее всего разрешу Вам это сделать, в обмен на живую ссылку, на статью оригинал.
DELETE из разных таблиц одним запросом
