- 读写锁
·排他锁,X
·共享锁,S - 意向锁
·意向排他锁,IX
·意向共享锁,IS
本文想记录一下自己对意向锁的机制的理解。
因为X锁和S锁既可以是行级锁也可以是表级锁,
假设在没有使用意向锁的时候,那么情景是这样的,
事物T想给数据库表tableA加表级X锁,因为X锁和X锁不兼容,
先要检查数据库表tableA目前有没有被加X锁(行级X锁或者表级X锁),
如果是tableA被加了表级X锁还好,但如果是加了行级X锁,
假设我们的tableA某一行加了行级锁,
那么当前事务T就需要逐行去查验有没有被加锁,
才能判断自己的表级X锁能否加成功,过程非常耗时。
这时引入IX锁的概念(以IX锁为例)。先来看一下意向锁的说明。
IX/IS 都是表级锁,用来表示一个事务想要在表中加X锁或S锁,有以下两个规定:
·一个事务在获得某个数据行对象的S锁之前,必须先获得表的IS锁或者更强的锁;
·一个事务在获得某个数据行对象的X锁之前,必须先获得表的IX锁。
通过引入意向锁,tableA如果被加了行级X锁或者表级X锁都会先加上IX锁。
X锁和IX锁是不兼容的,此时事务T加X锁,就会直接报出失败,
不需要逐行查验是否有行级X锁。