我已阅读关于意图锁定的MySQL手册: http://dev.mysql.com/doc/refman/5.5/en/innodb-locking.html#innodb-intention-locks
它说"要在多个粒度级别锁定实用",但如何?它没有告诉我们。
任何人都可以提供详细的解释和样本吗?
答案 0 :(得分:4)
将InnoDB数据空间视为数据库集合,每个数据库都是表的集合,每个表都是行的集合。这形成了一个层次结构,其中较低和较低级别提供了越来越多的粒度。
现在,当您想要在事务中更新此树的某些部分时,您是如何做到的?好吧,InnoDB使用multiple granularity locking (MGL)。 MGL中的机制是指定“意图”将特定粒度级别锁定为共享或排他,然后MGL将所有这些意图组合在一起并推进层次结构,直到找到必须锁定的最小生成集给定这些意图
没有意图锁定,你有高级共享和独占锁,这些锁实际上没有给你太大的灵活性:它们全是或全无,这就是我们的意思在MyISAM中看到。但是MGL带来了预期的共享和预期的独占的概念,正如我上面提到的那样,它提供了“恰到好处”的锁定。
如果您想了解具体的C级实施,请参阅Introduction to Transaction Locks in InnoDB。