SQL DELETE/UPDATE: удаление/обновление нескольких таблиц в один запрос

Рейтинг: 3Ответов: 2Опубликовано: 25.02.2011

Доброго времени суток!

Никак не могу найти ответа на этот вопрос: можно ли удалить запись сразу из нескольких таблиц? Ситуация такая: есть главная таблица и ещё несколько. Все они связаны через ключ:

главная.id = следующая1.id = следующая2.id = ...

Сработает ли такое удаление:

DELETE FROM главная, следующая1, следующая2, ...  
WHERE id = 26

Или нужно будет посылать отдельные DELETE-ы в каждую таблицу? (Если не использовать foreign key.)

Аналогичный вопрос относительно Update: необходимо обновить в этих таблицах список полей (имена полей соответственно для каждой таблицы свои). Можно ли собрать все эти таблицы JOIN-ом в одну и её обновить?

Что-то типа:

UPDATE Главная INNER JOIN следующая1 ON Главная.ID = Следующая1.ID
SET .....

Или вариант только один: обновлять каждую таблицу отдельно?

Заранее благодарен!

Ответы

▲ 6Принят

Чтобы сделать удаление / обновление в разных таблицах, для внешних ключей следует задать каскадное удаление и обновление.

ALTER TABLE ADD CONSTRAINT 
FOREIGN KEY [...]
ON DELETE CASCADE ON UPDATE CASCADE

Вы можете связать внешними ключами первичные ключи. Мы такую конструкцию активно используем для отображения наследования в БД.

Кроме того, если Вы всё-таки не можете использовать внешние ключи, Вы можете создать триггеры. Вы можете создать View на базе объединения таблиц, создать для неё INSTEAD OF-триггер для удаления / обновления и делать команду UPDATE / DELETE применительно ко View. В этом случае вызовется созданный триггер.

А одной командой - не получится.

▲ 3

Насколько я понимаю удалять (в соответствии с синтаксисом SQL) можно только из одной таблицы.

http://www.w3schools.com/sql/sql_delete.asp