Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
11 / 11 / 4
Регистрация: 01.02.2011
Сообщений: 111
1

commmit/rollback (транзакции)

14.03.2012, 14:59. Показов 1343. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Господа форумчане помогите разобраться с транзакциями.

У меня идея сдеать транзакцией несколько запросов как-то так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$trigg = array();
 
$trigg[] = mysql_query ("START TRANSACTION");
 
$trigg[] = mysql_query ("SELECT ...");
 
$trigg[] = mysql_query ("UPDATE ...");
 
$trigg[] = mysql_query ("DELETE ...");
 
if(in_array(false, $trigg)) {
 
  mysql_query ("ROLLBACK");
 
}else{
 
  mysql_query ("COMMIT");
 
}
Адекватен-ли подобный подход?

И вопрос второй.

Если все операции успешно завершились, но по какойто причине не была выполнена инструкция "COMMIT" сервер подвиснет, если кто-то другой будет пытаться выполнить эту-же транзакцию?
Ведь насколько я понимаю по умолчанию блокировки таблиц стоят в режиме SERIALIZABLE и никто не может выполнить запрос на доступ к таблицам используемым другой транзакцией, а данная транзакция еще не закончена, поскольку MySQL сервер не получил команду COMMIT?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2012, 14:59
Ответы с готовыми решениями:

Не срабатывает rollback
Доброго времени суток. Прошу помощи сам не могу до конца разобраться. Есть такой код: ...

Транзакции и WHERE
Здравствуйте. Немного не разобрался с транзакциями, помогите уяснить один момент. Допустим у...

Транзакции + кодировка
Народ подскажите в чем дело.... Проблема вот в чем: при использовании транзакции в базу не...

Транзакции из PHP
Доброго времени суток. Для выполнения запросов к БД пользуюсь функцией mysql_query($sql); В...

4
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
14.03.2012, 15:19 2
Цитата Сообщение от ruzab
Адекватен-ли подобный подход?
Вопрос о том, что включать в транзакцию, определяется бизнес-условиями, а не "адекватностью".
0
11 / 11 / 4
Регистрация: 01.02.2011
Сообщений: 111
14.03.2012, 23:21  [ТС] 3
Вопрос о том, что включать в транзакцию, определяется бизнес-условиями
Ну да, это понятно.
Я видимо неясно обозначил вопрос - вопрос не в том что именно включать, а нормально-ли имено так организовать обработку с точки зрения НЕ синтаксиса и расположения запросов, а вобще подхода к работе с транзакциями средствами php+mysql?

Т.е. первый вопрос он как-бы вытекает из второго - они тесно взаимосвязаны.

Ну вот допустим не выполнился mysql_query ("COMMIT") по каким-то причинам и как повлияет эта ошибка на работу сервера БД?

- При появлении ошибки сервер MySql откатит все изменения для данного соединения?

- Или продолжит работу и подвесит БД, и все остальные запросы для данного соединения будут рассматриваться как одна большая транзакция, а поскольку транзакция не завершена - остальные пользователи будут ждать ее завершения (как в случае с блокировкой) ?

Вот что именно непонятно ...
0
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
15.03.2012, 09:47 4
Цитата Сообщение от ruzab
а вобще подхода к работе с транзакциями средствами php+mysql?
PHP здесь ни при чем, вопрос чисто по серверу MySQL

Я не столь знаком с архитектурой MySQL, чтобы ответить точно (по Oracle я бы расписал все подробно ), поэтому чисто логически:

Цитата Сообщение от ruzab
Ну вот допустим не выполнился mysql_query ("COMMIT") по каким-то причинам и как повлияет эта ошибка на работу сервера БД?
COMMIT может не выполнится либо при падении сервера, либо при падении сессии (в последнем случае не всегда). Т.е. это дело достаточно редкое.

Цитата Сообщение от ruzab
Или продолжит работу и подвесит БД
Если бы это было так, то такая СУБД была бы реально непригодна для многопользовательской работы
1
11 / 11 / 4
Регистрация: 01.02.2011
Сообщений: 111
15.03.2012, 10:39  [ТС] 5
Всё понял, спасибо.
0
15.03.2012, 10:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2012, 10:39
Помогаю со студенческими работами здесь

Транзакции MySql
есть код считающий кол-во остатков, проблема при обращении с нескольких клиентов не учитывается...

возможности транзакции
Господа форумчане, поделитесь опытом! Возможно ли изменение суммы платежа после начала транзакции?...

Транзакции в PHP+MySQL
Здраствуйте. Пишу форум и у меня такая задача. При создании темы юзер имеет право аттачить...

php+MySQL транзакции
Доброго времени суток! Есть такая задача: Создайте приложение (PHP + MySQL), которое позволяет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru