У меня есть таблица, подобная следующей:
transaction_id
user_id
other_user_id
trans_type
amount
Эта таблица используется для ведения транзакций по счету для приложения типа "финансы".
Это учет двойной записи, поэтому при переходе от пользователя A к B две строки в таблице будут выглядеть следующим образом.
1, A, B, Sent, -100
1, B, A, Received, 100
Баланс по любому счету рассчитывается путем суммирования транзакций по этому счету.
Например:
select sum(amount) from transactions where user_id=A
Каков наилучший способ заблокировать перевод средств? Мой текущий код выглядит так:
Start Transaction
Debit the sender's account
check the balance of the sender's account
if new balance is negative then the sender didn't have enough money and rollback
if the balance is positive then credit the receiver and commit
Кажется, это работает не совсем так, как ожидалось. Я вижу много примеров онлайн о транзакциях, которые говорят в основном: начало, дебет отправителя, получатель кредита, фиксация. Но как лучше проверить баланс отправителя между ними?
У меня есть транзакции, которые не должны проходить. Допустим, у пользователя есть баланс 3K, и для 3K одновременно поступают две транзакции, и обе они проходят, когда только одна должна.
Спасибо