InnoDB锁介绍.md

2020-10-21  本文已影响0人  醉红尘丶

InnoDB锁可以划分为行锁和表锁

官方文档:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html

行锁有以下的几种:

表锁有以下几种:

行锁

1.共享锁【S】和排它锁【X】

# 手动添加S锁
SELECT ... LOCK IN SHARE MODE   # 8.0前
SELECT… FOR SHARE # 8.0
# 手动添加X锁
SELECT… FOR UPDATE

2.记录锁(Record Lock)

在MySQL中记录锁都是添加在索引上的,即使表中没有索引,也会在默认创建的聚集索引上添加记录锁。

3.间隙锁(Gap Lock)

间隙锁的锁定范围是索引记录之间的间隙,或者第一条或最后一条索引记录之前的间隙,间隙锁是针对事务隔离级别为RR或以上级别的。

4.记录锁与间隙锁的组合【Next-Key Lock】

Next-Key Lock 是索引记录本身加上之前的间隙。间隙锁保证在REPEATABLE-READ级别下不会出现幻读现象,防止在同一个事务内得到的结果不一致。

5.插入意向锁(Insert Intention Lock)

插入意向锁是针对INSERT操作设置的一种特殊的间隙锁,主要是为了优化INSERT操作的并发能力。这个锁表示插入的意图,即插入具有相同索引间隙的多个事务,如果插入的值不同,则不需要互相等待。插入意向锁之间是不冲突的,但是插入意向锁可能和其他锁是冲突的,比如Next-Key Lock。

表锁

1.意向锁(Intention Lock)

意向锁在MySQL中是表级别锁,表示将来要对表添加什么类型的锁(IX/IS)。

2.自增锁(AUTO-INC Lock)

自增锁是插入到具有AUTO_INCREMENT字段的表中的事务所采用的特殊表级锁。innodb_autoinc_lock_mode参数用于控制自增锁的算法。

锁含义

使用show engine innodb语句查看锁信息时,会看到LOCK_MODE字段

上一篇 下一篇

猜你喜欢

热点阅读