Помогите оптимизировать DELETE запрос

UsersVasia
Дата: 25.12.2012 14:35:04
Есть 2 таблицы Departments и Users, у Users есть поле idDep, которое дублирует поле id таблицы Departments -- таким образом они связаны.

"Проблема" стандартная, при удалении какой либо записи из Departments связанные с ней записи в Users остаются. Я решил эту "задачу" следующим образом.
Сперва удаляем все записи с нужным id из таблицы Departments:
DELETE FROM  Departments WHERE Departments.id=?;

Затем удаляем все записи с нужным idDep (который совпадает с id таблицы Departments) из таблицы Users.
DELETE FROM  Users WHERE Users.idDep=?;

Получается 2 запроса -- внутренне чутьё подсказывает, что это можно вместить в один запрос:
DELETE Departments , Users  FROM  Departments , Users WHERE Departments.id=? AND Departments.id = Users.idDep;

Но в этом случае, если в таблице Users нет записей, где Departments.id = Users.idDep, то запрос не отрабатывает, и записи Departments не удаляются -- а эта функция должна быть, так как может быть отдел, в котором пока нет пользователей и его нужно удалить.
tanglir
Дата: 25.12.2012 14:38:37
UsersVasia,

вы изобрели foreign key - on delete cascade

А вы уверены, что надо именно удалять департамент, а не помечать как неактивный? с историей проблем не возникнет?
UsersVasia
Дата: 25.12.2012 14:53:40
Уверен что нужно удалять.
Спасибо за ответ. Я правильно понимаю, что для того что-бы воспользоватьсяforeign key - on delete cascade нужно использовать таблицы типа InnoDB? Я использовал MyISAM.

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html
tanglir
Дата: 25.12.2012 15:06:10
UsersVasia,

да, в майисаме внешние ключи не работают.