Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Механизм корректного выполнения НЕСКОЛЬКИХ запросов
 
 автор: .dreamer   (10.11.2006 в 14:47)   письмо автору
 
 

Добрый день, уважаемые коллеги!

Вот моя ситуация...
Работаю с базой данных на MySQL и модулями к ней на PHP
Модули при определенных действиях пользователя выполняют несколько запросов -- допустим три запроса.. Первый INSERT а второй и третий UPDATE.. Причем если второй или третий запрос не будет выполнен, то это повлечет за собой появление некорректной информации в базе данных... Например, есть такая вероятность что на втором или третьем запросе может грохнуться сервер MySQL ... Конечно, такая ситуация маловероятна, но всё же не хотелось бы её упускать... Я пока пришёл к единственному решению -- ведению лога с возникшими ошибками при запросах, чтобы админ на основании него мог ручками подправить базу..

Так вот мои два вопроса...
1. Есть ли какие-нибудь механизмы в MySQL, которые бы обеспечивали выполнение нескольких запросов, а если один из них не выполнен по какой либо ошибке, чтобы все остальные тоже не выполнялись?..
2. Если нет, то как лучше обрабатывать такую ситуацию?..

Заранее спасибо за помощь!

   
 
 автор: Yakor   (10.11.2006 в 15:06)   письмо автору
 
   для: .dreamer   (10.11.2006 в 14:47)
 

Есть, называется транзакция. (transaction)

«Транзакция» - это неделимая операция (серия операций), которая может быть либо выполнена полностью, либо не выполнена вообще. Если операция выполнилась, но частично, СУБД позаботится о том, чтобы из базы было «вычищено» все недоделанное.

http://bash.org.ru/quote.php?num=60492 =))))))))

   
 
 автор: cheops   (10.11.2006 в 15:25)   письмо автору
 
   для: Yakor   (10.11.2006 в 15:06)
 

Подробнее о транзакциях в MySQL можно почитать в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=12795.

   
 
 автор: .dreamer   (10.11.2006 в 18:00)   письмо автору
 
   для: cheops   (10.11.2006 в 15:25)
 

А как быть если количество записей может достигать сотен тысяч... И при этом хотелось бы использовать какой нибудь механизм против сбоев..? Ведь таблицы, поддерживающие транзакции требовательны к ресурсам и намного медленней.. ((

   
 
 автор: Yakor   (10.11.2006 в 18:16)   письмо автору
 
   для: .dreamer   (10.11.2006 в 18:00)
 

можно попытаться разбить запрос на несколько...

   
 
 автор: .dreamer   (10.11.2006 в 18:34)   письмо автору
 
   для: Yakor   (10.11.2006 в 18:16)
 

Что то не понял.. В смылсе разбить на несколько?..
Допустим так...
Первый запрос INSERT....... для одной таблицы... После этого
Для второй UPDATE... И потом
Для третей UPDATE....

Получается всего три запроса, и если на каком то из них (не считая первого) по каким либо техническим причинам нет соединения с сервером MySQL, то не очень хорошо получается...

   
 
 автор: Yakor   (10.11.2006 в 15:09)   письмо автору
 
   для: .dreamer   (10.11.2006 в 14:47)
 

P.S. myisam и isam не поддерживают транзакции.

   
 
 автор: .dreamer   (10.11.2006 в 15:52)   письмо автору
 
   для: .dreamer   (10.11.2006 в 14:47)
 

cheops, Yakor, огромное спасибо!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования