Mysql锁:行锁,表锁,共享锁,排他锁,间隙锁…
概念一大把不多赘述
锁粒度越小其资源开销越大,对锁的使用需要在资源与业务上寻找一个平衡点
Laravel行级排他锁
注意:行级锁需要在索引列上使用,否则其升级为表锁(非共享锁在没有使用索引的情况下InnoDB就会使用表级锁)
public function test(){
DB::beginTransaction();
Test::query()->lockForUpdate()->where("id",1)->first();
for($i=0;$i<=100;$i++){
sleep(1);
var_dump($i);
}
}
用sleep来拉长下执行时间,在客户端开第二个进程执行
select * from tests where id = 1 for update;
就会发现其被第一个进行所阻塞。
- 加锁必须在事务中
- 读取时普通读取依然不会被阻塞
- 写入时操作时无论是否使用索引,是否单独批量写入,只要涉及该行数据都将被阻塞
MySQL锁及Laravel行级排他锁解析

博客介绍了MySQL的多种锁,如行锁、表锁等,指出锁粒度与资源开销的关系,需在资源和业务间找平衡。还讲解了Laravel行级排他锁,强调要在索引列使用,否则会升级为表锁,加锁需在事务中,写入涉及该行数据会被阻塞。

1336

被折叠的 条评论
为什么被折叠?



