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

bav

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

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

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

Я не очень понял, моржет кто напишит пример такого запроса?
 

BRat

o_0
Одним запросом - смотри здесь
http://dev.mysql.com/doc/refman/5.0/en/delete.html
Multi-table syntax. внизу статьи примеры есть
 

master_x

Pitavale XXI wieku
bav
как эти таблицы связанны (подробней)? и сразу почитать про foreign key
 

bav

Новичок
все оказалось, действительно, не так просто. Есть три таблички 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. Если таковых нет, то удаления не происходит.
Я почитал про внешние ключи, но только что-то я особо толкового не понял. Может у кого есть статейка хорошая?
 

Maxxon

Новичок
Теоритически, если у тебя связь от radel.razdel_id к element.razdel_id и к catalog.razdel_id "один ко многим", то достаточно удалить строку из razdel, а из других таблиц удалится само...
 

bav

Новичок
В конечном итоге этого надо добится. Связи пока нет, есть только структура таблиц. ДЛя этого нужно расставить FK. Но вот как это сделать? Например хотя бы средсвами phpMyADmin?
 

<-svazist->

Новичок
Если мне память не изменяет FK поддерживает тип таблиц InnoDB
MyISAM возможно в последних версиях, не знаю точно.

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

в phpMyAdmin при просмотре структуры таблицы есть ссылка на "Relation view"
 

bav

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