MySQL InnoDB锁定连接的行

Mil*_*šić 12 mysql innodb transactions join locks

"SELECT ... FOR UPDATE"锁是否在MySQL中加入了行?

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

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

Bar*_*mar 7

请参阅此MySQL文档页面.它说:

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

和:

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

"扫描行"是指来自连接中使用的任何表的行.


Ala*_*ins -2

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

进而

如果启用自动提交,则不会锁定符合规范的行。

这个mySQL 文档没有提供答案吗?

  • 不,文档中没有提到 JOIN。 (6认同)