引擎: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
=>表已锁定
有没有办法只用一个查询(有多个条件)来锁定多个记录?
===================问题已修复========================== ====
对不起,我在第一次编辑问题时错过了“更新”。
答案 0 :(得分:1)
我认为select命令不会锁定您选择的行。根据文档https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html,您应该使用SELECT ... FOR UPDATE来锁定行。