事务中对一条数据锁定两次会怎么样?

<?php
$id = 1;
DB::transaction(function () use ($id) {
    //锁定数据
    Cart::where('id', $id)->lockForUpdate()->first();
    # 逻辑代码
    Cart::where('id', $id)->lockForUpdate()->first();   
});

这样会出现BUG吗?按我的理解这样不会出问题吧,为了保险起见,先咨询一下大佬们

让PHP再次伟大
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 5
aab

刚刚在 mysql 8.0 测试了一下,这个确实是可以的!

2年前 评论
勇敢的心 (楼主) 2年前

既然mysql排它锁的机制是阻止其它session获得锁,那当然是不会阻止已经获得锁的session也就是自己,所以不会有问题

2年前 评论

select for update 语句相当于一个 update 语句,既然在事务中 select for update 过后可以对表多次 update ,那自然也可以多次 select for update ,这么说可能好理解点

2年前 评论

好奇,为什么要这么做呢?

2年前 评论

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