一:锁的模式
共享锁
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隔离级别下支持
记录锁、间隙锁和临键锁的联系