Forum Webscript.Ru

Общие => Базы данных => Тема начата: Maresh от 10 Мая 2004, 13:20:32

Название: Несколько удалений...
Отправлено: Maresh от 10 Мая 2004, 13:20:32
Привет, всем!

У меня такая проблема:
Есть БД в ней 5 таблиц, причем во второй таблице есть внешний ключ ссылающийся на первую, в третьей на вторую и.т.д)- вобщем иерархия.
мне нужно выполнить 5 deletов, т.е я знаю id(первичный ключ) в  первой таблице.

Теперь вопрос: мне хотелось бы быть уверенным, что удалятся либо все необходимые записи, либо не удалится ничего.(транзакция)

Как бы это поэффективнее сделать?
Название: Несколько удалений...
Отправлено: Chs от 10 Мая 2004, 22:25:38
Ну а БД какая?
Название: Несколько удалений...
Отправлено: Maresh от 10 Мая 2004, 23:18:28
MySQL не пятая
Название: Несколько удалений...
Отправлено: Alexandr от 11 Мая 2004, 08:04:32
Если 4, то
DELETE t1, t2, t3, t4, t5
FROM t1, t2, t3, t4, t5
WHERE t1.id=t2.id AND t2.id=t3.id AND t3.id=t4.id AND t4.id=t5.id AND t5.id=12
Название: Несколько удалений...
Отправлено: Maresh от 12 Мая 2004, 09:22:44
Спасибо большое!
Попробую
Название: Несколько удалений...
Отправлено: Maresh от 13 Мая 2004, 22:57:15
У меня такая вот проблема: если например в 3ей по иерархии  таблице нет строк удовлетворяющих условию, то не удаляется вообще ничего(то есть и записи из других таблиц не удаляются).
Можно ли с этим бороться?
Название: Несколько удалений...
Отправлено: Chs от 14 Мая 2004, 09:11:59
Можно.
Читать про LEFT JOIN.
Выбирать id select\'ом по LEFT JOIN, а удалять отдельными запросами по конкретным id.
Название: Несколько удалений...
Отправлено: Maresh от 14 Мая 2004, 10:17:09
Но это уже несколько DELETE запросов будет, так?
Название: Несколько удалений...
Отправлено: Chs от 14 Мая 2004, 13:49:49
Да, запросов DELETE будет несколько - по одному на каждую таблицу, но если есть индекс по id работать они будут быстро.
Название: Несколько удалений...
Отправлено: commander от 14 Мая 2004, 16:39:37
Maresh
CREATE FUNCTION
если не хочешь нагружать приложение...
Название: Несколько удалений...
Отправлено: Макс от 14 Мая 2004, 18:12:51
так вроде бы mysql 4 уже поддерживает
ON DELETE CASCADE
Название: Несколько удалений...
Отправлено: Макс от 14 Мая 2004, 18:18:01
http://dev.mysql.com/doc/mysql/ru/CREATE_TABLE.html
да, действительно есть, но только innodb :)