Удаление строк из взаимосвязанных таблиц

  • Автор темы Автор темы bav
  • Дата начала Дата начала

bav

Новичок
Удаление строк из взаимосвязанных таблиц

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

1 Выполните в главной таблице SELECT строк на основе некоторого условия WHERE.
2 Выполните DELETE строк главной таблицы на основе этого же условия.
3 DELETE FROM related_table WHERE related_column IN (selected_rows).

Я не очень понял, моржет кто напишит пример такого запроса?
 
Одним запросом - смотри здесь
http://dev.mysql.com/doc/refman/5.0/en/delete.html
Multi-table syntax. внизу статьи примеры есть
 
bav
как эти таблицы связанны (подробней)? и сразу почитать про foreign key
 
все оказалось, действительно, не так просто. Есть три таблички razdel, element, catalog.
структура razdel: razdel_id (primary key) | razdel_name
Структура element: element_id (primary key) | razdel_id | element_name
Структура catalog: catalog_id (primary key) | razdel_id | element_id | catalog_name

И скажем надо удалить один раздел. Тогда нужно чтоб он удалился из catalog, element и razdel. Это я сделал при помощи Multi-table syntax, но тут возникла проблема.
PHP:
DELETE razdel,menu,catalog FROM razdel,menu,catalog WHERE razdel.razdel_id='".$_POST['razdel_id']."' AND menu.razdel_id=razdel.razdel_id AND catalog.razdel_id=razdel.razdel_id
Этим кодом удаление работает только при условии, что в табличках element и catalog, присутсвуют записи с необходимым razdel_id. Если таковых нет, то удаления не происходит.
Я почитал про внешние ключи, но только что-то я особо толкового не понял. Может у кого есть статейка хорошая?
 
Теоритически, если у тебя связь от radel.razdel_id к element.razdel_id и к catalog.razdel_id "один ко многим", то достаточно удалить строку из razdel, а из других таблиц удалится само...
 
В конечном итоге этого надо добится. Связи пока нет, есть только структура таблиц. ДЛя этого нужно расставить FK. Но вот как это сделать? Например хотя бы средсвами phpMyADmin?
 
Если мне память не изменяет FK поддерживает тип таблиц InnoDB
MyISAM возможно в последних версиях, не знаю точно.

Внешние ключи устанавливаются на поля первичных ключей либо с индексами.
Для автоматического удаления связанных записей установить ON DELETE - CASCADE

в phpMyAdmin при просмотре структуры таблицы есть ссылка на "Relation view"
 
угу спасибо! ПРосто у меня админ криво настроен был)) А с ключиками в англоязычной документации почитал, вроде понял теперь! Еще раз спасибо)
 
Сверху