Php laravel 5.4:悲观锁定。在事务完成之前避免选择行
我将金融交易存储在数据库中。 出于效率考虑,我在交易行中保存了金额和账户余额。 例如: ID |交易|金额|账户|余额 新行中的科目余额计算为最后一个科目余额+新交易金额 要继续此操作,我需要先进行选择,然后进行插入。 问题是如果两个交易几乎同时发生。两者都将读取相同的上次账户余额,插入后,账户余额将不一致 我已经看过函数lockForUpdate(),但我不完全确定如何在这种情况下使用它,甚至不确定它是否适用Php laravel 5.4:悲观锁定。在事务完成之前避免选择行,php,mysql,laravel-5,transactions,locking,Php,Mysql,Laravel 5,Transactions,Locking,我将金融交易存储在数据库中。 出于效率考虑,我在交易行中保存了金额和账户余额。 例如: ID |交易|金额|账户|余额 新行中的科目余额计算为最后一个科目余额+新交易金额 要继续此操作,我需要先进行选择,然后进行插入。 问题是如果两个交易几乎同时发生。两者都将读取相同的上次账户余额,插入后,账户余额将不一致 我已经看过函数lockForUpdate(),但我不完全确定如何在这种情况下使用它,甚至不确定它是否适用 解决这个问题的最佳方法是什么?我认为最好的方法是使用数据库事务。比如说 开始工作;
解决这个问题的最佳方法是什么?我认为最好的方法是使用数据库事务。比如说
开始工作;
从交易记录中选择账户余额;
--增加帐户余额,然后提交
更新账户余额设置账户余额=新账户余额;
承诺代码>您可以稍后使用laravel计划作业来更新帐户余额,而不是同时执行这两项操作。