"SELECT ... FOR UPDATE"
锁定MySQL中的连接行吗?
如果是这样,是否可以禁用此行为?
文档中没有任何相关内容。我已经看到Oracle支持"SELECT ... FOR UPDATE OF table_name"
,其中table_name是主表或受影响的行将被锁定的连接表之一,但我从来没有在MySQL的上下文中看到这一点。
答案 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没有提供答案吗?