MySQL InnoDB锁定连接的行

时间:2011-07-12 13:10:32

标签: mysql join transactions innodb locks

"SELECT ... FOR UPDATE"锁定MySQL中的连接行吗?

如果是这样,是否可以禁用此行为?

文档中没有任何相关内容。我已经看到Oracle支持"SELECT ... FOR UPDATE OF table_name",其中table_name是主表或受影响的行将被锁定的连接表之一,但我从来没有在MySQL的上下文中看到这一点。

2 个答案:

答案 0 :(得分:6)

this MySQL doc page。它说:

  

锁定读取,UPDATE或DELETE通常会在处理SQL语句时扫描的每个索引记录上设置记录锁定。语句中是否存在将排除该行的WHERE条件无关紧要。

  

对于SELECT ... FOR UPDATE或SELECT ... LOCK IN SHARE MODE,为扫描的行获取锁定,并且对于不符合包含在结果集中的行,预计会释放锁定(例如,如果它们不符合WHERE子句中给出的标准。但是,在某些情况下,行可能不会立即解锁,因为在查询执行期间结果行与其原始源之间的关系会丢失。

“扫描的行”是指来自连接中使用的任何表的行。

答案 1 :(得分:0)

  

SELECT ... FOR UPDATE锁定行和任何关联的索引条目,就像为这些行发出UPDATE语句一样。

然后

  

如果启用了自动提交,则不会锁定与规范匹配的行。

mySQL doc没有提供答案吗?