Как удалить записи из нескольких таблиц одним запросом (MySQL)? - CodeHelper

Как удалить записи из нескольких таблиц одним запросом (MySQL)?

1

В базе имеется родительская таблица и несколько подчиненных. При этом внешние ключи и каскадное удаление не настроено. Задача — удалить некоторые записи родительской таблицы так, чтобы соответствующие записи в дочерних таблицах тоже удалились. Сделать несколько запросов на удаление из каждой из таблиц не получится, потому что проверка на то, должна удаляться строка или нет довольно-таки сложная и эту проверку можно осуществить только рассматривая все таблицы в совокупности. Можно ли в MySQL использовать один запрос чтобы удалить записи из всех таблиц сразу?

Лучший ответ:

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.

v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.