次のようなテーブルがあります。
transaction_id
user_id
other_user_id
trans_type
amount
このテーブルは、金融タイプのアプリのアカウント トランザクションを維持するために使用されます。
複式簿記であるため、ユーザー A から B への転送では、次のようにテーブルに 2 つの行が挿入されます。
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 の残高を持っていて、2 つのトランザクションが 3K に対してまったく同時に入ってきたとします。これらは両方とも、1 つだけが通過する必要があります。
ありがとうございました