MySQL InnoDB存储引擎中的锁(二)

1. 锁的算法

InnoDB存储引擎中有三种行锁算法:

  • Record Lock:单个行记录上的锁
  • Gap Lock: 间隙锁,锁定一个范围,但不包含记录本身
  • Next-key Lock: Gap Lock + Record Lock, 锁定一个范围, 并且锁定记录本身
1.1 Next-Key Lock

Next_Key Lock 是结合了Gap Lock 和 Record Lock的一种锁定算法,例如有一个索引有10, 11, 13, 20 四个值, 则Next-Key Lock的锁定区间为(-∞, 10), [10, 11), [11, 13), [13, 20), [20, +∞)。
当查询的索引含有唯一属性时, Next-Key Lock会降级为Record Lock,仅锁住索引本身,而不是范围
对于辅助索引, 则会使Next-Key Lock,并且InnoDB引擎还会对辅助索引的下一个键值加上Gap Lock

InnoDB使用Next-Key Locking机制来避免幻读问题。

幻读是指在同一事务下, 连续执行两次同样的SQL语句可能导致不同结果, 第二次的SQL语句可能会返回之前不存在的行。

2. 死锁

2.1 概念
    死锁是指两个或者两个以上的事务在执行过程中,因争夺锁资源造成的一种互相等待的现象。   
解决死锁的方式:
  • 超时回滚:当一个事务等待时间超过设定的时间时进行回滚, 另一个事务就可以继续进行, InnoDB中通过参数innodb_lock_wait_timeout来设置超时时间
  • wait-for graph(等待图):保存锁的信息链表, 事务的等待链表,通过两个链表构建一张图,若图存在环,则说明存在死锁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值