You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data JDBC中PESSIMISTIC_WRITE与PESSIMISTIC_READ能否互换?

Spring Data JDBC中PESSIMISTIC_READ与PESSIMISTIC_WRITE的区别及不可互换性

这两种悲观锁类型绝对不能互换使用,它们的语义和PostgreSQL底层实现完全不同,你的理解存在部分偏差,具体说明如下:

1. PESSIMISTIC_READ(共享锁)

  • 对应PostgreSQL的SELECT ... FOR SHARE语句
  • 核心行为:获取共享锁后,允许其他事务读取该记录,但会阻塞所有试图修改(更新/删除)这条记录的事务
  • 纠正认知:它不会阻塞普通读取操作,其他事务依然可以正常查询该座位数据,只是无法修改。

2. PESSIMISTIC_WRITE(排他锁)

  • 对应PostgreSQL的SELECT ... FOR UPDATE语句
  • 核心行为:获取排他锁后,既阻塞其他事务对该记录的修改操作,也阻塞其他事务获取该记录的共享锁(即其他用PESSIMISTIC_READ的查询会被卡住)
  • 纠正认知:它不会阻塞所有读取——PostgreSQL基于MVCC特性,其他事务不加锁的普通SELECT依然能读取到该记录的快照版本,只有加了悲观锁的读取会被阻塞。

适用场景差异

  • 若你仅需确保读取期间座位记录不被修改,用PESSIMISTIC_READ即可,锁粒度更轻,能保留更高的读并发。
  • 若你读取座位后要执行修改操作(比如更新座位状态),必须用PESSIMISTIC_WRITE,防止其他事务同时修改导致数据冲突。

内容的提问来源于stack exchange,提问作者Kobi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:09:54