MySQL - 记录多个条件的查询锁

时间:2018-01-08 03:08:17

标签: mysql sql

引擎:InnoDB company_id是这种情况下的主键。 当我运行以下sql时,它只锁定所选的行:

select * from company where company_id = 1 for update

=> 1行锁定

select * from company where company_id in (1, 2) for update

=>锁定了2行

但是当条件数增加到5时,sqls看起来像这样,会锁定整个表:

SELECT
    * 
FROM
    company 
WHERE
    company_id = 1 
    OR company_id = 2 
    OR company_id = 3 
    OR company_id = 4 
    OR company_id = 5
FOR UPDATE

=>表已锁定

SELECT
    * 
FROM
    company 
WHERE
    company_id IN (1, 2, 3, 4, 5)
FOR UPDATE

=>表已锁定

有没有办法只用一个查询(有多个条件)来锁定多个记录?

===================问题已修复========================== ====

对不起,我在第一次编辑问题时错过了“更新”。

1 个答案:

答案 0 :(得分:1)

我认为select命令不会锁定您选择的行。根据文档https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html,您应该使用SELECT ... FOR UPDATE来锁定行。