MySQL的锁

80 阅读1分钟

一:锁的模式

共享锁

select ... lock in share mode

排他锁

select for update
update
insert into
delete

意向锁

分为意向共享锁IS和意向排他锁IX

解决效率问题,在表级别建立,类似公告牌,不用逐次遍历查找

表级别的锁,由MySQL自己添加,无法手动添加

兼容性

S锁和S锁是兼容的,S锁和X锁是不兼容的,X锁和X锁也是不兼容的。

X锁S锁IX锁IS锁
X锁不兼容不兼容不兼容不兼容
S锁不兼容兼容不兼容不兼容
IX锁不兼容不兼容兼容兼容
IS锁不兼容兼容兼容兼容

组合性

X锁S锁IX锁IS锁
表级别
行级别

意向锁是表级别的特有的锁

二:锁的粒度

全局锁

1、对整个数据库上锁

flush tables with read lock;

2、释放锁

unlock tables;

表级锁

其他的引擎只有表锁

记录锁(行级锁)

InnoDB特有的,是基于索引的锁

在RC、RR隔离级别下都支持

AUTO LOCK

翻译成自增锁

主要针对自增的主键。

GAP LOCK

翻译成间隙锁

主要解决幻读问题,不对索引本身上锁,会在当前索引的前后开区间上锁

在RR隔离级别下支持

Next-Key Lock

翻译成临键锁

行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap,前开后闭区间

在RR隔离级别下支持

记录锁、间隙锁和临键锁的联系 image.png