mysql的for update问题

我在一个int型字段上建了索引,这个字段a大概有(0,1,2,3,4,5,6)这几个值

我使用
select * from table where a in (3,5) for update

然后再另一个session里执行insert
字段A为0,1,6的时候,不会发生锁等待,
字段A为2,3,4,5的时候,发生锁等待

3,5锁等待我能理解,2,4为什么会发生锁等待

我又尝试了一下方法
1、where 条件增加 主键<当前最大主键值
2、使用子查询把select pk from table where pk in (select pk from table where a in (3,5))

都没有效果,为什么?!子查询反而好像整张表都锁了,所有insert都等待了

有没有什么办法可以之锁定3,5的记录,其他记录不影响。

先前介绍过SELECT ... FOR UPDATE的用法,不过锁定(Lock)的资料是判别就得要注意一下了。由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住)。

举个例子:

假设有个表单products ,里面有id跟name二......
答案就在这里:【电商网站】mysql中select * for update锁表的问题
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

MySQL INNODB锁等待分析 http://www.data.5helpyou.com/article359.html