Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel 5.4:悲观锁定。在事务完成之前避免选择行_Php_Mysql_Laravel 5_Transactions_Locking - Fatal编程技术网

Php laravel 5.4:悲观锁定。在事务完成之前避免选择行

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

我将金融交易存储在数据库中。 出于效率考虑,我在交易行中保存了金额和账户余额。 例如:

ID |交易|金额|账户|余额

新行中的科目余额计算为最后一个科目余额+新交易金额

要继续此操作,我需要先进行选择,然后进行插入。 问题是如果两个交易几乎同时发生。两者都将读取相同的上次账户余额,插入后,账户余额将不一致

我已经看过函数lockForUpdate(),但我不完全确定如何在这种情况下使用它,甚至不确定它是否适用


解决这个问题的最佳方法是什么?

我认为最好的方法是使用数据库事务。比如说

开始工作;
从交易记录中选择账户余额;
--增加帐户余额,然后提交
更新账户余额设置账户余额=新账户余额;

承诺

您可以稍后使用laravel计划作业来更新帐户余额,而不是同时执行这两项操作。