Mysql中的锁
按行为方式:
- 共享锁S
- 互斥锁X
按粒度讲: - 表锁
- 行锁
按照行为和粒度结合起来: - IS
- IX
从行角度: - Record Lock
- Gap Lock
- Next-Key Lock
- Intention Lock
- 隐式锁
如何加锁?
READ UNCOMMITTED/READ COMMITTED
- 对于使用主键进行等值查询的情况: Record Lock S/X
- 对于使用主键[m,n)进行范围查询的情况: Gap Lock[m..n), S/X, 加锁过程中,会对n加锁,随后释放
- 对于使用二级索引进行等值查询的情况: 先二级索引加Record Lock,再对一级索引加Record Lock
- 对于使用二级索引进行范围查询的情况: 逐条查找二级索引对其加锁Record Lock,再对其一级索引加Record Lock
- 全表扫描的情况: 逐行扫描全表,先Record Lock锁住行,如果没有找到条件释放锁,反不释放,遍历下一条
REPEATABLE READ隔离级别下
- 对于使用主键进行等值查询的情况: Record Lock S/X
- 查询主键值为N的不存在的记录: N Gap Lock
- 对于使用主键[m,n)进行范围查询的情况: next-key[m,n)
- 对于使用唯一二级索引进行等值查询的情况: 先对二级索引加Record Lock,再对其一级索引加Record Lock
对于使用唯一二级索引不存在,进行等值查询的情况: 先对二级索引加Gap Lock
对于使用唯一二级索引进行范围查询的情况: 逐条查找二级索引对其加锁Next-Key Lock,再对其一级索引加Record Lock
全表扫描的情况:逐行扫描全表,先Next-Key Lock锁住行,如果没有找到条件释放锁,反不释放,遍历下一条
posted on 2020-04-07 01:11 yipianlarou 阅读(87) 评论(0) 编辑 收藏 举报