SELECT FOR UPDATE和WHERE条件在两个索引列上 - 什么是锁定策略?

时间:2011-04-21 17:39:36

标签: mysql transactions rowlocking

这个问题是这个问题的合理延续:

How many rows will be locked by SELECT ... ORDER BY xxx LIMIT 1 FOR UPDATE?

假设我有这样的SELECT:

SELECT id, status FROM job WHERE status = XXX AND id IN (1, 2, 3) FOR UPDATE

id是主键,状态已编入索引。

在这种情况下,MySQL的锁定策略是什么?

  1. 锁定仅匹配两个条件的行
  2. 锁定与第一个条件匹配的所有行+分别锁定与第二个条件匹配的所有行
  3. 锁定整个表格
  4. 我认为最符合逻辑的是2.但是......我不确定。你能详细说明吗?

1 个答案:

答案 0 :(得分:1)

好吧,我做了测试,他们表明选项1在这种情况下有效。

  

锁定仅匹配两者的行   条件