14

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

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

文档中对此一无所知。我已经看到 Oracle 支持"SELECT ... FOR UPDATE OF table_name"其中 table_name 是主表或受影响的行将被锁定的连接表之一,但我从未在 MySQL 的上下文中看到过这一点。

4

2 回答 2

11

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

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

和:

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

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

于 2012-09-03T16:05:42.407 回答
-1

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

接着

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

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

于 2012-06-05T01:53:40.583 回答