引擎: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 行锁定
但是当条件数增长到五个时,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
=> 表已锁定
有什么方法可以只用一个查询(有多个条件)锁定多条记录?
===================问题已解决========================== ====
很抱歉,我在第一次编辑问题时错过了“for update”。
最佳答案
我认为 select 命令不会锁定您选择的行。根据文档https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html , 你应该使用 SELECT ... FOR UPDATE 来锁定行。
关于MySQL - 记录具有多个条件的查询锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48143775/