当在MySQL/InnoDB的行锁定(是否隐含由于事务的隔离级别,或明确使用SELECT * ... FOR UPDATE
或``... LOCK IN SHARE MODE`):在MySQL/InnoDB中锁定行是否总是锁定所有关联的索引记录?
这是否锁也适用于与该行关联的所有索引记录,还是只锁定用于通过锁定语句本身访问锁的索引记录?
作为一个例子,假设存在一个y
列x
,表,和z
,其中x
和y
进行索引。
将把该语句SELECT * FROM Table WHERE x = foo
,它返回一个纪录(x = foo, y = bar, z = c)
也会让所有的语句像SELECT * FROM Table WHERE y = bar
等待上了锁,或可这些仍然可以并发执行(假设他们不会试图当然修改锁定行本身) ?
更新:请注意,问题是而不是关于索引记录或间隙锁的一般。这是关于通过扫描索引x
锁定读取的具体情况,以及是否会使查询扫描超过y
等待。
此外,HTTPS:/ /www.percona.com/blog/2012/03/27/innodbs-gap-locks/ – Drew
@Drew我知道索引记录和间隙锁定是如何工作的,这个问题具体是关于锁定查询未被扫描的索引。 – lxgr
如在另一个数据库中? – Drew