说明表中有些行被共享行锁锁住了

为了检测是否满足第二个条件,事务 B 必须在确保users表不存在任何排他锁的前提下,去检测表中的每一行是否存在排他锁。很明显这是一个效率很差的做法,但是有了意向锁之后,情况就不一样了:事务B只要看表上有没有

意向共享锁,有则说明表中有些行被共享行锁锁住了,因此,事务B申请表的写锁会被阻塞。这样是不是就高效多了。http://lx.gongxuanwang.com/ss... 这也解释就应该清楚,为什么有意向锁这个东西存在了。

我们可以举个生活中的例子,再来理解下为什么需要存在意向锁。也就是你有10个事务,对不同的10行加了行级X锁,那么这个时候就存在10个IX锁。

这10IX存在的目的是啥呢,山东遴选就是假如这个时候有个事务,想对整个表加排它X锁,那它不需要遍历每一行是否存在S或X锁,而是看有没有存在意向锁,只要存在一个意向锁,那这个事务就加不了表级排它X锁,要等上面10个IX全部释放才行。

打个比方,就像有个游乐场,很多小朋友进去玩,看门大爷如果要下班锁游乐场的门(加表锁),他必须确保每个角落都要去检查一遍,确保每个小朋友都离开了(释放行锁),才可以锁门。

假设锁门是件频繁发生的事情,大爷就会非常崩溃。那大爷想了一个办法,每个小朋友进入,就把自己的名字写在本子上,小朋友离开,就把自己的名字划掉,那大爷就能方便掌握有没有小朋友在游乐场里,不必每个角落都去寻找一遍。http://lx.gongxuanwang.com/ss...

例子中的“小本子”,就是意向锁,他记录的信息并不精细,他只是提醒大爷,有人在屋里。

你可能感兴趣的