Forum Webscript.Ru
Общие => Базы данных => Тема начата: Maresh от 10 Мая 2004, 13:20:32
-
Привет, всем!
У меня такая проблема:
Есть БД в ней 5 таблиц, причем во второй таблице есть внешний ключ ссылающийся на первую, в третьей на вторую и.т.д)- вобщем иерархия.
мне нужно выполнить 5 deletов, т.е я знаю id(первичный ключ) в первой таблице.
Теперь вопрос: мне хотелось бы быть уверенным, что удалятся либо все необходимые записи, либо не удалится ничего.(транзакция)
Как бы это поэффективнее сделать?
-
Ну а БД какая?
-
MySQL не пятая
-
Если 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
-
Спасибо большое!
Попробую
-
У меня такая вот проблема: если например в 3ей по иерархии таблице нет строк удовлетворяющих условию, то не удаляется вообще ничего(то есть и записи из других таблиц не удаляются).
Можно ли с этим бороться?
-
Можно.
Читать про LEFT JOIN.
Выбирать id select\'ом по LEFT JOIN, а удалять отдельными запросами по конкретным id.
-
Но это уже несколько DELETE запросов будет, так?
-
Да, запросов DELETE будет несколько - по одному на каждую таблицу, но если есть индекс по id работать они будут быстро.
-
Maresh
CREATE FUNCTION
если не хочешь нагружать приложение...
-
так вроде бы mysql 4 уже поддерживает
ON DELETE CASCADE
-
http://dev.mysql.com/doc/mysql/ru/CREATE_TABLE.html
да, действительно есть, но только innodb :)