laraval再lockforupdate的情况下,如何防止读到脏数据

场景是这样的,用户下单时候,我对用户的资产加了一个lockforupdate,防止用户在其他地方同时下单,资产用到其他地方,当时我发现lockforupdate,只能锁定不更改,其他地方读还是可以的那其他地方显示的数据可能就错误了,这中情况该如何避免?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

你是不是没用把lockForUpdate的sql放进事务里面,如果没放事务里面就等于没锁到
例:

DB::transaction(function  ()  {
    DB::table('users')
            ->where('votes', '>', 100)
            ->lockForUpdate()
            ->get();
});
3年前 评论

如果没记错的话 for update 是排他锁,锁住后别人是不能读取的。

所以不存在你说的情况

3年前 评论

用户资产相关的数据可以加一个版本字段,更新时读取的版本是条件

3年前 评论
Tangqy 3年前

事务的隔离级别

3年前 评论

执行sql需放置事务中【事务结束,锁才会释放】,没有放在事务中,那条sql执行完【锁就释放掉了】

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!