我正在将金融交易存储在数据库中。 出于效率原因,在事务行中我保存了ammount以及帐户的余额。 例如:
ID | TRANSACTION_AMOUNT | ACCOUNT_BALANCE
新行中的ACCOUNT_BALANCE计算为最后一次ACCOUNT_BALANCE +新的TRANSACTION_AMOUNT。
要继续此操作,我需要先执行SELECT,然后执行INSERT。 问题是两个交易几乎同时发生。它们都将读取相同的最后一个ACCOUNT_BALANCE,并且在插入后ACCOUNT_BALANCE不一致。
我已经看过函数lockForUpdate()但是我不完全确定如何在这种情况下使用它,或者即使应用它。
解决这个问题的最佳方法是什么?
答案 0 :(得分:0)
我认为最好的方法是使用数据库事务。例如
BEGIN WORK;
SELECT account_balance FROM transaction;
-- up the account balance then commit
UPDATE account_balance SET account_balance = new_balance;
COMMIT;