注意:这里只讨论InnoDB引擎中的 Lock 类型的锁,不包括 latch锁。
只有当实现本身会增加开销时,行级锁才会增加开销。
InnoDB存储引擎不需要锁升级
,因为一个锁和多个锁的开销是相同的。
行锁
分类
- 共享锁(S lock):允许事务
读
一行数据。 - 排他锁(X lock):允许事务
删除
或更新
一行数据。
兼容性
X锁与任何的锁都不兼容,而S锁仅和S锁兼容。

意向锁
含义
意向锁(IntentionLock)是将锁定的对象
分为多个层次
,意向锁意味着事务希望在更细粒度(finegranularity)
上进行加锁。
InnoDB存储引擎
支持意向锁设计比较简练,其意向锁
即为表级别
的锁。
设计目的
主要是为了在一个事务中揭示下一行
将被请求的锁类型。
分类
支持两种意向锁:
- 意向共享锁(ISLock),事务想要获得一张表中
某几行
的共享锁 - 意向排他锁(IXLock),事务想要获得一张表中
某几行
的排他锁
对最细粒度
的对象进行上锁,那么首先
需要对粗粒度
的对象上锁。
兼容性
由于InnoDB存储引擎支持的是行级别
的锁,因此意向锁其实不会阻塞
除全表扫描
以外的任何请求
。

网友评论