MySQLInnoDB锁机制(三)(二)

2015-01-23 22:08:11 · 作者: · 浏览: 15
它指向相同聚族索引的索引(id2 = 5)都会被加锁。 明白了上面的例子,那官网的总结就很容易理解了,在这里简单总结一下: 在可重复读级别下,InnoDB以Next-Key Lock的方式对索引加锁;在读已提交级别下,InnoDB以Index-Record Lock的方式对索引加锁。 被加锁的索引如果不是聚族索引,那被锁的索引所指向的聚族索引以及其它指向相同聚族索引的索引也会被加锁。 SELECT * FROM ... LOCK IN SHARE MODE对索引加共享锁;SELECT * FROM ... FOR UPDATE对索引加排他锁。
SELECT * FROM ... 是非阻塞式读,(除Serializable级别)不会对索引加锁。在读已提交级别下,总是查询记录的最新、有效的版本;在可重复读级别下,会记住第一次查询时的版本,之后的查询会基于该版本。例外的情况是在串行化级别,这时会以Next-Key Lock的方式对索引加共享锁。 UPDATE ... WHERE 与DELETE ... WHERE对索引加排他锁。 INSERT INTO ... 以Index-Record Lock的方式对索引加排他锁。