powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Транзакции и блокировки в MySQL
4 сообщений из 4, страница 1 из 1
Транзакции и блокировки в MySQL
    #39566369
BIS-10-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Перечитал много статей по транзакциям и блокировкам в MySQL, но пока так и не понял, что следует использовать для моего случая. Имеется таблица clients с полем balance, где записан баланс пользователя. Пользователь в интерфейсе вводит сумму, которую хочет списать и в результате поле balance должно быть обновлено для данного клиента. Как защитить себя от того, что два процесса могут одновременно считать и записать данные в одну строку. Таблица InnoDB. Заранее благодарен за помощь в этом вопросе!
...
Рейтинг: 0 / 0
Транзакции и блокировки в MySQL
    #39566372
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BIS-10-2Как защитить себя от того, что два процесса могут одновременно считать и записать данные в одну строку.Зависит от того, каким кодом это выполняется.
Если используется тупое
Код: sql
1.
2.
3.
UPDATE table 
SET field = field - value 
WHERE ID = currentID


то никакие транзакции/блокировки не помогут (ну то есть можно, конечно, заблокировать запись при её открытии, но это будет как бы не хуже).
Можно использовать контролирующее
Код: sql
1.
2.
3.
4.
UPDATE table 
SET field = field - value
WHERE ID = currentID 
  AND field = oldvalue


после чего смотреть affected_rows на предмет того, выполнено ли обновление. Если нет - выводить сообщение "Пока Вы тут телились, кто-то изменил значение".

А вообще надо плясать от логики процесса - возможно, обновление можно разрешить даже в случае, когда текущее значение изменено другим пользователем - например, контролировать, что после обновления баланс не снесёт в минус...
...
Рейтинг: 0 / 0
Транзакции и блокировки в MySQL
    #39567138
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если прочитать и списать по времени недалеко друг от друга то start transaction isolation level serializable

если далеко то вариант Акины.
...
Рейтинг: 0 / 0
Транзакции и блокировки в MySQL
    #39567157
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как насчет варианта с SELECT ... FOR UPDATE ?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Транзакции и блокировки в MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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