В базе имеется родительская таблица и несколько подчиненных. При этом внешние ключи и каскадное удаление не настроено. Задача — удалить некоторые записи родительской таблицы так, чтобы соответствующие записи в дочерних таблицах тоже удалились. Сделать несколько запросов на удаление из каждой из таблиц не получится, потому что проверка на то, должна удаляться строка или нет довольно-таки сложная и эту проверку можно осуществить только рассматривая все таблицы в совокупности. Можно ли в MySQL использовать один запрос чтобы удалить записи из всех таблиц сразу?
Как удалить записи из нескольких таблиц одним запросом (MySQL)?
1
Спросил
Лучший ответ:
1
Команду DELETE в MySQL можно использовать для удаления из нескольких таблиц сразу, используя один из вариантов синтаксиса:
1) Поддерживается начиная с версии MySQL 4.0.0. Строки удаляются только из таблиц, перечисленных перед FROM
:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]
2) Поддерживается начиная с версии MySQL 4.0.2. Строки удаляются только из таблиц, перечисленных после FROM
и перед USING
:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name[.*] [, tbl_name[.*]] ...
USING table_references
[WHERE where_condition]
Примеры использования первого и второго варианта:
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
В обоих примерах строки удаляются только из таблиц t1 и t2, но поиск ведется также с учетом данных из t3.