lockForUpdate是否支持whereIn?能否批量锁定多行?
lockForUpdate搭配whereIn的行锁定说明
- 你的代码会锁定
whereIn子句匹配的所有行,而非整个表,但具体行为确实和SQL服务器的实现有关(主流数据库如MySQL、PostgreSQL表现一致)。 - Laravel的
lockForUpdate()会生成带FOR UPDATE锁的SQL,搭配whereIn时最终SQL类似:SELECT * FROM table_1 WHERE column IN (?, ?, ...) FOR UPDATE。 - 主流关系型数据库(MySQL InnoDB、PostgreSQL)对这类语句的处理都是仅锁定匹配行,不会锁全表。但要注意:如果查询未命中索引,数据库可能退化为表级锁(比如MySQL InnoDB做表扫描时的间隙锁或表锁),所以要确保
column字段有合适的索引。 - 你可以开启Laravel的SQL日志,查看实际生成的SQL语句,确认锁的作用范围。
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

