【MySQL 】数据库加锁机制分析

一、InnoDB模式:


(1)行锁

  (1.1)行锁分类:

  1. 共享锁(S):允许一个事务去读一行,阻止其它事务获得相同数据集的排它锁
  2. 排它锁(X):允许获得排它锁的事务更新数据,阻止其它事务取得相同数据集的共享锁和排它锁
  3. 意向共享锁(IS):事务在给一个数据行加共享锁前必须先取得该表的IS锁
  4. 意向排它锁(IX):事务在给一个数据行加排它锁前必须先取得该表的IX锁     
锁模式的兼容情况
 共享锁排它锁意向共享锁意向排它锁
共享锁兼容互斥兼容互斥
排它锁互斥互斥互斥互斥
意向共享锁兼容互斥兼容兼容
意向排它锁互斥互斥兼容兼容

      技巧:意向锁之间是兼容的,排它锁与任何锁之间是互斥的,意向排它锁又与共享锁和排它锁互斥

(1.2)行锁实现方式:

  • InnoDB行锁是通过给索引项上的索引加锁来实现的,意味着只有通过索引条件检索数据,才会使用行级锁,否则使用表锁
  • 只有执行计划真正使用了索引,才能使用行锁,即便在条件中使用了索引字段,但是否使用索引是由MySQL通过判断不同执行计划的代价来决定的,若认为全表扫描效率更高,就不会使用索引,这种情况下将会使用表锁,而不是行锁
  • 由于行锁是针对索引加的锁,不是针对记录加的锁,所以虽然多个session是访问不同行的记录,但是如果是使用相同的索引键,是会出现锁冲突的

(2)间隙锁(定义:间隙锁是封锁索引记录中的间隔 

(2.1)唯一索引: (1)记录不存在,会产生间隙索引(2)范围查询,会产生间隙锁(3)记录存在,不会产生间隙锁
(2.2)普通索引:不管是何种查询,只要加锁,都会产生间隙锁

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值