Автор Тема: Несколько удалений...  (Прочитано 4823 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Maresh

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Несколько удалений...
« : 10 Мая 2004, 13:20:32 »
Привет, всем!

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

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

Как бы это поэффективнее сделать?

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Несколько удалений...
« Ответ #1 : 10 Мая 2004, 22:25:38 »
Ну а БД какая?
2B OR NOT 2B = FF

Оффлайн Maresh

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Несколько удалений...
« Ответ #2 : 10 Мая 2004, 23:18:28 »
MySQL не пятая

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Несколько удалений...
« Ответ #3 : 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
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Maresh

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Несколько удалений...
« Ответ #4 : 12 Мая 2004, 09:22:44 »
Спасибо большое!
Попробую

Оффлайн Maresh

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Несколько удалений...
« Ответ #5 : 13 Мая 2004, 22:57:15 »
У меня такая вот проблема: если например в 3ей по иерархии  таблице нет строк удовлетворяющих условию, то не удаляется вообще ничего(то есть и записи из других таблиц не удаляются).
Можно ли с этим бороться?

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Несколько удалений...
« Ответ #6 : 14 Мая 2004, 09:11:59 »
Можно.
Читать про LEFT JOIN.
Выбирать id select\'ом по LEFT JOIN, а удалять отдельными запросами по конкретным id.
2B OR NOT 2B = FF

Оффлайн Maresh

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Несколько удалений...
« Ответ #7 : 14 Мая 2004, 10:17:09 »
Но это уже несколько DELETE запросов будет, так?

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Несколько удалений...
« Ответ #8 : 14 Мая 2004, 13:49:49 »
Да, запросов DELETE будет несколько - по одному на каждую таблицу, но если есть индекс по id работать они будут быстро.
2B OR NOT 2B = FF

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Несколько удалений...
« Ответ #9 : 14 Мая 2004, 16:39:37 »
Maresh
CREATE FUNCTION
если не хочешь нагружать приложение...
And no religion too...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Несколько удалений...
« Ответ #10 : 14 Мая 2004, 18:12:51 »
так вроде бы mysql 4 уже поддерживает
ON DELETE CASCADE
« Последнее редактирование: 14 Мая 2004, 18:20:11 от Макс »
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Несколько удалений...
« Ответ #11 : 14 Мая 2004, 18:18:01 »
http://dev.mysql.com/doc/mysql/ru/CREATE_TABLE.html
да, действительно есть, но только innodb :)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28