powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как установить монопольную транзакцию в mysql?
2 сообщений из 2, страница 1 из 1
Как установить монопольную транзакцию в mysql?
    #39295090
websiller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшой пример, не реальная ситуация, а просто для понимания задачи:

Файл test1.php

mysqli_query($connect, 'START TRANSACTION');
mysqli_query($connect, 'SELECT @var:=value FROM userinfo WHERE id=1');
sleep(10);
mysqli_query($connect, 'UPDATE userinfo SET value=@var + 1 WHERE id=1');
mysqli_query($connect, 'COMMIT');

Файл test2.php

mysqli_query($connect, 'START TRANSACTION');
mysqli_query($connect, 'SELECT @var:=value FROM userinfo WHERE id=1');
mysqli_query($connect, 'UPDATE userinfo SET value=@var + 1 WHERE id=1');
mysqli_query($connect, 'COMMIT');

Есть две транзакции. Суть в том что они должны прочитать значение поля (value), увеличить его на 1 и записать результат обратно в это поле. Проблема в том, что эти транзакции не блокируют друг друга, а выполняются параллельно. В первом файле (test1.php) между чтением и записью значения есть функция sleep(10), которая заставляет программу ждать 10 секунд, перед выполнение следующих операций. Если сначало запустить файл test1.php, а потом сразу запустить test2.php, то в результате поле value увеличиться лишь на единицу. Это логично, ведь первый файл сначало прочитает значение и потом заснет на 10 сек, в то время как второй файл также прочитает это значение и сразу же увеличит его на 1. Спустя 10 сек. 'проснется' первый файл, который знает только старое значение и ничего не знает о новом. Увеличит его на 1 и обновит данные. То есть в итоге выполнения обоих файлов значеие увеличиться на 1, а не на 2. Мне же нужно, чтобы транзакции выполнялись поочередно. То есть пока не выполниться первая, вторая не сможет получить доступ к строкам испольемым в первой транзакции. Как можно изменить стандартное поведение, чтобы транзакции выполнялись последовательно одна за другой. Уровень изолированости транзакции изменить не могу (хостер не разрешает). Да и проблему это бы не решило, так как даже при уровне SERIALIZABLE второй файл тупо выдаст ошибку что записи заняты и прекратит свое выпонение, а не встанет в очередь, как мне нужно.
...
Рейтинг: 0 / 0
Как установить монопольную транзакцию в mysql?
    #39295148
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
websiller,
select.... for update.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как установить монопольную транзакцию в mysql?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]