Как использовать транзакции при создании денежных операций?
В своём приложении я храню финансовые операции пользователя в отдельной таблице (пополнения/траты). Текущий баланс пользователя рассчитывается на основе суммирования всех операций.
При совершении покупки проверяется текущий баланс и если он больше или равен сумме покупки - создается новая расходная операция.
Я переживаю за то, что при большой нагрузке (или просто при стечении обстоятельств) система сможет пропустить две покупки, даже если денег хватает только на одну. Баланс пользователя уйдет в минус, однако услуга будет получена.
Если бы баланс хранился просто полем, то я бы мог использовать select for update, но тут баланс каждый раз рассчитывается. Как использовать транзакции в данном случае?