【发布时间】:2018-01-08 03:08:16
【问题描述】:
引擎: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
=> 表被锁定
有没有什么办法可以只用一个查询(有多个条件)锁定多条记录?
====================问题已解决=========================== ====
很抱歉,我在第一次编辑问题时错过了“更新”。
【问题讨论】:
-
“公司”表中有多少行?
-
另见:dev.mysql.com/doc/refman/5.7/en/innodb-locking.html 和来自xpertdeveloper.com/2011/11/row-locking-with-mysql;此查询将不允许其他事务;读取 id=10 的行;它也不允许更新或删除。 SELECT * FROM table_name WHERE id=10 FOR UPDATE;