mysql意向锁的概念和用途

锁的粒度

A. 表锁(Table Lock)

对整个表加锁,影响标准的所有记录。通常用在DDL语句中,如DELETE TABLE,ALTER TABLE等。

B. 行锁(Row Lock)

对一行记录加锁,只影响一条记录。通常用在DML语句中,如INSERT, UPDATE, DELETE等。

很明显,表锁影响整个表的数据,因此并发性不如行锁好。

- 意向锁(Intention Lock)

因为表锁覆盖了行锁的数据,所以表锁和行锁也会产生冲突。如:

A. trx1 BEGI

B. trx1 给 T1 加X锁,修改表结构。

C. trx2 BEGIN

D. trx2 给 T1 的一行记录加S或X锁(事务被阻塞,等待加锁成功)。

trx1要操作整个表,锁住了整个表。那么trx2就不能再对T1的单条记录加X或S锁,去读取或修这条记录。

为了方便检测表级锁和行级锁之间的冲突,就引入了意向锁。

A. 意向锁分为意向读锁(IS)和意向写锁(IX)。

B. 意向锁是表级锁,但是却表示事务正在读或写某一行记录,而不是整个表。

所以意向锁之间不会产生冲突,真正的冲突在加行锁时检查。

C. 在给一行记录加锁前,首先要给该表加意向锁。也就是要同时加表意向锁和行锁。

采用了意向锁后,上面的例子就变成了:

A. trx1 BEGIN

B. trx1 给 T1 加X锁,修改表结构。

C. trx2 BEGIN

D. trx2 给 T1 加IX锁(事务被阻塞,等待加锁成功)

E. trx2 给 T1 的一行记录加S或X锁.

- 表锁的兼容性矩阵

IS IX S X

IS + + + –

IX + + - -

S + - + -

X - - - -

+ 代表兼容, -代表不兼容

A. 意向锁之间不会冲突, 因为意向锁仅仅代表要对某行记录进行操作。在加行锁时,会判断是否冲突。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值