我將財務交易存儲在數據庫中。 爲了提高交易行的效率,我保存了ammount以及帳戶的餘額。 例如:laravel 5.4:悲觀鎖定。避免在交易完成前選擇一行
ID | TRANSACTION_AMOUNT | ACCOUNT_BALANCE
新行中的ACCOUNT_BALANCE計算爲最後的ACCOUNT_BALANCE +新的TRANSACTION_AMOUNT。
要繼續這個操作,我需要先做一個SELECT然後一個INSERT。 問題是如果兩筆交易幾乎同時發生。它們都將讀取相同的最後一個ACCOUNT_BALANCE,並在插入ACCOUNT_BALANCE之後不一致。
我已經看到函數lockForUpdate(),但我不完全確定如何使用它的這種情況下,甚至如果適用。
最好的解決辦法是什麼?
您可以使用laravel計劃的作業來更新account_balance後,而不是做togther他們兩個。 – sumit