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编辑  收藏  举报