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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。