小伙伴们大家好呀,最近在学习InnoDB存储引擎,也看了一些优秀的相关博客,大有收获,后面会持续输出一些关于InnoDB存储引擎相关的文章,希望在帮助自己记忆的同时,也可以帮助到你。
InnoDB支持3种行锁的算法,分别是:
- Record Lock:单个行记录上的锁
- Gap Lock:间隙锁,锁定一个范围,但不包含记录本身
- Next-Key Lock:Gap Lock与Record Lock的结合,锁定一个范围,并且锁定记录本身
一、Record Lock
- Record Lock总是会去锁住索引记录
- 如果InnoDB存储引擎表在建立的时候没有设置任何一个索引,那么这时InnoDB会使用隐式的主键来进行锁定
二、Gap Lock
- 附带在下面介绍
三、Next-Key Lock
- Next-key Lock是结合了Gap Lock和Record Lock的一种锁定算法,在该算法下,InnoDB对于行的查询都是采用这种锁定算法
- 在默认的隔离级别下,即REPEATABLE READ下,InnoDB采用Next-key Locking机制。而在READ COMMITTED下,其仅采用Record Lock
- 例如一个索引有10、11、13、20这四个值,那么该索引可能被Next-Key Locking的区间为:
Next-Key Locking锁定技术
- 采用Next-Key Lock的锁定技术称为Next-Key Locking。其设计的目的是为了解决Phantom Problem(在下面介绍)
- 而利用这种锁定技术,锁定的不是单个值,而是一个范围,是谓词锁(predict lock)的一种改进
- 若事务T1已经通过Next-Key Locking锁定了如下范围:
- 当插入新的记录12时,则锁定的范围会变成:
previous-key locking锁定技术
- 除了Next-K