Как использовать транзакции при создании денежных операций?

В своём приложении я храню финансовые операции пользователя в отдельной таблице (пополнения/траты). Текущий баланс пользователя рассчитывается на основе суммирования всех операций.

При совершении покупки проверяется текущий баланс и если он больше или равен сумме покупки - создается новая расходная операция.

Я переживаю за то, что при большой нагрузке (или просто при стечении обстоятельств) система сможет пропустить две покупки, даже если денег хватает только на одну. Баланс пользователя уйдет в минус, однако услуга будет получена.

Если бы баланс хранился просто полем, то я бы мог использовать select for update, но тут баланс каждый раз рассчитывается. Как использовать транзакции в данном случае?


Ответы (0 шт):