mysql中的各种锁

锁的分类

  • 隔离级别:共享锁(S锁)、排他锁(X锁)。
  • 粒度:行级锁、表级锁。
  • 意向锁:获得行级 S锁、X锁 的前提是获得意向锁。在锁整张表的事务中,可以根据是否有意向锁进行快速判断,而无须检查每行数据是否被上锁。
  • 间隙锁、next-key lock:用索引进行范围查询,会将范围内的记录加锁(行级锁),范围内**不存在的值(间隙)**也会被加上锁(间隙锁),防止事务中发生幻读。

关于间隙锁

测试各种情况下的 锁范围
  • 等值查询。 where id =1 for update(主键)、where idx_col =1 for update(唯一索引列) 只会加行级锁。
  • 范围查询。where id > 4 for update 的锁范围是 (4, ∞)。where id >= 4 for update 的锁范围是 [4, ∞)。where id > 2 and id <4 for update 的锁范围是 (2,4]; where id > 2 and id <=4 for update的锁范围是 (2,5]。
间隙锁的特点
  • 间隙锁不是排他锁,因此多个事务可以给同一个间隙上锁。如果2个事务给同一个间隙上锁,且都尝试往间隙中插入数据,则会发生死锁。

参考:
解决死锁之路 - 了解常见的锁类型
意向锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值