Каскадное удаление.

SPQR

Новичок
Каскадное удаление.

Есть иерархическая структура: темы делятся на лекции, лекции на вопросы, вопросы на ответы. Как организовать запрос, чтобы при удаление темы, удалялись каскадом и остальные связанные данные?
 

svetasmirnova

маленький монстрик
440hz
Зачем?
Что-то типа
[sql]
delete from lections, questions, answers where lection.id=question.lection_id and question.id=answers.question_id and lection.id='needed'
[/sql]
 

Frol

Новичок
svetasmirnova
твой пример прекрасно показывает зачем.
 

svetasmirnova

маленький монстрик
Frol
Ну можно же руками обеспечить внешние ключи. И тогда уж правильный ответ "используйте внешние ключи", а не просто тип таблицы :)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: svetasmirnova
Ну можно же руками обеспечить внешние ключи.
Возникает вопрос "зачем". Варианты ответов:
1) Тебе за это приплачивают;
2) Тебе нравится по-новой решать задачи, для которых существуют качественные стандартные решения;
3) Ты развиваешь память, запоминая все файлы, которые придётся изменить при изменении схемы базы данных.
 

svetasmirnova

маленький монстрик
Sad Spirit
Ещё три варианта:
1) Дешёвый хостинг, где возможно только создание таблиц MyISAM
2) FULLTEXT поиск, работающий только в MyISAM. Даже если он нужен в паре таблиц, внешние ключи между MyISAM и INNODB работать не будут. Тут приходится выбирать что проще сделать ручками в каждом конкретном случае.
3) [last not least] Если посмотреть топики в этом разделе, можно увидеть темы, авторы которых спокойно создают таблицы с внешними ключами, но не могут выбрать оттуда записи при помощи элементарного JOIN. И эти люди не смогут составить поисковый запрос на dev.mysql.com типа: FOREIGN KEY + INNODB, CASCADE + INNODB, так как не знают этих терминов. Ничего такого я не хочу сказать про нашего thread-стартера. Тем не менее вопрос был сформулирован именно так как он был сформулирован (не скажите какие таблицы поддерживают внешние ключи, а подскажите запрос) и форум читают разные люди.
 
Сверху