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

标签 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 行锁定

但是当条件数增长到五个时,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/

相关文章:

sql - 在 where 子句中使用数组函数

sql - INSERT IF NOT EXISTS 类型函数供我使用而不将列转换为主键?

php - Mysqli 预处理语句 : several WHERE clauses and WHERE IN (Array)

php - mysql-将许多命令组合成一个

mysql - 如何将图片存入数据库

mysql - 如何计算rails 3中has_many关联之间平均值的较大值

MySQL更新所有以相同前缀开头的字符串,但仅删除以下划线开头的部分

mysql - 使用 if else 条件触发

mysql - 这种连接在 SQL 中可行吗?

mysql - 在 mysql 服务器上触发两个查询会出现错误