文章目录
引言
- 在做一些SQL的过程中,总是对于行级锁会出现的一些理解上的问题,就找了一些资料,来补充一下,之前只不过是背过了,但是并不深刻理解。
- 这里参考的都是小林coding的内容,链接
- 这里是看了小林coding的内容,然后自己在进行二次消化总结,目录结构基本上是一致的。
这里先对行机锁的变化进行总结,方便尽心背诵
- 当前读的几种加锁情况,宗旨,只要能避免幻读就行!
- 唯一索引等值查询
- 值不存在
- 第一个大于参考值的记录的索引,退化为间隙锁(a,b),a<x<b
- 值存在
- 对应记录索引加记录锁
- 值不存在
- 唯一索引范围查询
- 大于:num > x
- x存在:a<x<b
- x是对应记录的索引是间隙锁
- b对应记录的索引是next-key锁,(x,b]
- 最后一个特殊值对应的记录的索引是(b,+∞]
- x不存在:a<(x)<b
- b对应的是next-key锁,(a,b]
- 最后一个特殊值对应的记录的索引是(b,+∞]
- x存在:a<x<b
- 大于等于 num >= x,需要考虑到记录锁
- x存在:a<x<=b
- x上记录锁
- b上的是next-key锁:(x,b]
- 最后一个特殊值对应的记录的索引是(b,+∞]
- x不存在:a<b
- b的是next-key锁,也就是(a,b]
- 最后一个特殊值对应的记录的索引是(b,+∞]
- x存在:a<x<=b
- 小于 num < x
- x存在:a<x<b
- x 是间隙锁,也就是(a,x)
- a 是next-key锁,也就是(-∞,a]
- x不存在 a < b
- b加的是间隙锁(a,b)
- a是next-key锁,也就是(-∞,a]
- x存在:a<x<b
- 小于等于 num <= x
- x存在:a <= x < b
- x是next-key锁,也就是(-∞,x]
- a是next-key锁,也就是(-∞,a]
- x不存在:a < b
- b是间隙锁,也就是(a,b)
- a是next-key锁,也就是(-∞,a]
- x存在:a <= x < b
- 大于:num > x
- 唯一索引等值查询
正文
什么SQL语句会加行级锁
-
普通的select语句不加行级锁,快照读,通过MVCC来实现的。
-
两种类型的锁,分别是共享锁和独占锁
- 共享锁S:满足读读共享,读写互斥。
- 独占锁X:满足写写互斥,读写互斥。
查询操作增加对应的行级锁
查询加锁的方式有两种,枷锁的查询语句成为锁定读
S型锁
select