Laravel悲观锁sharedLock与lockForUpdate

本文详细介绍了在Laravel中如何使用悲观锁,包括sharedLock和lockForUpdate的区别,以及MySQL的for update锁的使用场景、类型和注意事项。在高并发场景下,for update用于保证数据准确性,避免并发更新导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Laravel使用悲观锁

重点:sharedLock 和 lockForUpdate 仅适用于InnoDB,并且必须开启事务,在begin与commit之间才生效。

for updatelock in share mode 都是用于确保被选中的记录值不能被其它事务更新(上锁)。

两者的区别在于 lock in share mode 不会阻塞其它事务读取被锁定行记录的值。

  而 for update 会阻塞其他锁定性读对锁定行的读取

(非锁定性读仍然可以读取这些记录,lock in share mode 和 for update 都是锁定性读)。

举个计数器的例子:

在一条语句中读取一个值,然后在另一条语句中更新这个值。

使用 lock in share mode 的话可以允许两个事务读取相同的初始化值,所以执行两个事务之后最终计数器的值+1;

而如果使用 for update 的话,会锁定第二个事务对记录值的读取直到第一个事务执行完成,这样计数器的最终结果就是+2了。

示例

Laravel 查询构建器提供了一些方法帮助你在 select 语句中实现“悲观锁”。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其黑、受其白

喝个咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值