在MySQL中发出UPDATE语句(使用InnoDB和REPEATABLE READ隔离级别),包含如下子查询:
UPDATE bar INNER JOIN (SELECT i1, i2 FROM foo) inner
ON bar.b1 = inner.i1
SET bar.b2 = inner.i2)
InnoDB引擎是否仅锁定来自bar
表的所有受影响的行,或者foo
表中的所有访问行是否(共享或排他地)锁定在整个查询的持续时间内?
JOIN而不是子查询有什么区别吗?