本站资源收集于互联网,不提供软件存储服务,每天免费更新优质的软件以及学习资源!

PHP乐观锁加事务扣款为何只成功一次?

网络教程 app 1℃

PHP乐观锁加事务扣款为何只成功一次

php使用乐观锁加事务扣除余额为何只成功扣了1次?

在扣除用户余额时,出现了只扣除一次的情况,究其原因是以下几个方面:

事务范围错误

应将与金额相关的操作都置于事务中,但实际代码中使用了 find 查询,该查询会执行一个 select 语句,这是错误的事务使用方式。

乐观锁使用错误

find 查询后,再调用 save 更新余额,ではなく乐观锁的预期行为。乐观锁的预期 SQL应该是仅在旧余额为指定值时更新新余额。

事务管理错误

Db::transaction 启动的事务不需要手动提交,因为内部会自动提交。如果出现异常,只需抛出异常,事务内部会自动回滚并继续抛出异常。

第二种方式奏效的原因

第二种方式奏效是因为隔离了查询用户信息和更新余额的操作,防止了并发时的超卖问题,但仍存在乐观锁使用错误的问题。正确的做法是将查询余额和更新余额都置于事务中,并使用乐观锁判断旧余额是否为指定值,以确保更新的正确性。

以上就是PHP乐观锁加事务扣款为何只成功一次?的详细内容,更多请关注范的资源库其它相关文章!

转载请注明:范的资源库 » PHP乐观锁加事务扣款为何只成功一次?

喜欢 (0)