为了检测是否满足第二个条件,事务 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…
例子中的“小本子”,就是意向锁,他记录的信息并不精密,他只是揭示大爷,有人在屋里。