事务中对一条数据锁定两次会怎么样?
<?php
$id = 1;
DB::transaction(function () use ($id) {
//锁定数据
Cart::where('id', $id)->lockForUpdate()->first();
# 逻辑代码
Cart::where('id', $id)->lockForUpdate()->first();
});
这样会出现BUG吗?按我的理解这样不会出问题吧,为了保险起见,先咨询一下大佬们
关于 LearnKu
刚刚在 mysql 8.0 测试了一下,这个确实是可以的!
既然mysql排它锁的机制是阻止其它session获得锁,那当然是不会阻止已经获得锁的session
也就是自己,所以不会有问题select for update语句相当于一个update语句,既然在事务中select for update过后可以对表多次update,那自然也可以多次select for update,这么说可能好理解点好奇,为什么要这么做呢?