1、Shared and Exclusive Locks
共享锁,排他锁
共享锁:允许其他事务共享该锁,事务A获得了共享锁1,事务B可以获取共享1

排他锁: 当一个事务获得排他锁A,那么其他事务就无法再获取排他锁A
排他锁拥有,说明其他事务没有在对应的表或者行数据上有任何锁。
2、Intention Locks 意图锁
场景
事务A持有了t1的row1行数据的共享锁,
事务B打算更新t1的数据,那么首先要获取t1的排他锁,获取排他锁之前,首先扫描这个表,看每一个行数据是否已经被锁住了,如果被锁住那么事务B就获取排他锁失败。当事务扫描完后发现事务A已经持有一个锁,该锁锁住了row1行的数据,于是事务B获取锁失败。这个情况事务B获取锁的代价非常大,因为需要扫描全表的数据。于是有了意向锁。
要想获取共享锁,排他锁之前,首先要获得意向锁。
事务A首先获得意向锁IS,然后获取共享锁S,
事务B首先获取意向锁IX,发现无法获取,以为已经有事务有了意向锁IS,于是事务B获失败,这样事务B减少了扫描全表操作。
事务C首先获取意向锁IS,然后获取共享锁s,获取成功
场景2
事务A获取了意向锁IX
事务B此时可以获取意向锁IX
事务c此时可以获取IS,因为没有锁住任何数据呢

Record Locks
A record lock is a lock on an index record

Gap Locks
A gap lock is a lock on a gap between index records, or a lock on the gap before the first or after the last index record. For example, SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;

Next-Key Locks

A next-key lock is a combination of a record lock on the index record and a gap lock on the gap before the index record.

Insert Intention Locks


linyelai
59 声望12 粉丝

真正的大师,永远怀着一颗学徒的心


« 上一篇
pdf转图片
下一篇 »
Linux 安装字体