SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.10.2017 16:20:18

diakon
Участник
Зарегистрирован: 01.02.2016
Сообщений: 2

Транзакции, блокировка обновляемой строки

Добрый день!
Пожалуйста, подскажите, а то никак не пойму как быть...
При чтении записи из БД можно заблокировать строку, что бы ее не могли поменять другие запросы, пока не отработает SELECT:
SELECT * FROM table FOR UPDATE;

А как быть со строкой при операции UPDATE?
Например, есть строка в таблице со счетом. ИЗ этого счета постоянно списываются средства при помощи UPDATE table SET `sum`= 'xxx' WHERE  `id`=ID
Все эти UPDATE работают с одной строкой (пусть ID=1) и обернуты в транзакцию.
Скажите, как то можно блокировать эту строку, что бы если запустится параллельно другая транзакция, она не могла ни прочитать текущее значение sum, пока не отработает запущенная транзакция (ожидала окончания транзакции что бы получить верное sum) и не запускалась пока  работающая транзакция не будет окончена?

Спасибо!

Неактивен

 

#2 29.10.2017 06:13:07

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 20.01.2007
Сообщений: 3767

Re: Транзакции, блокировка обновляемой строки

Для начала уточните запрос. Пусть будет SET `sum`=`sum`-100. Или в транзакции сначала SELECT, а потом апдейт? Затем попробуйте выполнять несколько параллельных транзакций в разных уровнях изоляции.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson