【发布时间】:2011-10-03 15:03:30
【问题描述】:
"SELECT ... FOR UPDATE" 是否会锁定 MySQL 中的连接行?
如果是这样,是否可以禁用此行为?
文档中没有关于此的内容。我已经看到 Oracle 支持 "SELECT ... FOR UPDATE OF table_name" 其中 table_name 是主表或受影响的行将被锁定的连接表之一,但我从未在 MySQL 的上下文中看到过这一点。
【问题讨论】:
-
更新语句是否锁定其他表中的行?我认为它应该(可能取决于隔离级别),因为更新中的值可能取决于另一个表上的值。您需要用于更新吗?也许锁定共享模式是您正在寻找的?无论如何,我个人对这个答案很感兴趣,但也许唯一的判断方法就是测试这个。
-
我已经对 InnoDB 插件提供的增强信息以及我的事务锁定的行数和我的应用程序的行为进行了一些研究,我想说 MySQL 正在锁定所有连接的行到主表的行。我还没有找到可以改变这一点的查询子句或 InnoDB 选项,所以我们现在似乎被这种默认行为所困扰。
-
我在 MySQL 文档中找到了答案
-
请问任何人都可以透露一个明确的答案吗?
-
简短回答...是的。当 MySQL 文档中使用“SELECT ... FOR UPDATE 锁定行和任何关联的索引条目”中的 ... 时,暗示了这一点
标签: mysql join transactions innodb locks