SELECT ... FOR UPDATE 加锁后,其他线程能读取数据吗

在数据库中使用 SELECT ... FOR UPDATE 时,会对选中的行加上排他锁(X锁),阻止其他事务对这些行进行修改或删除。但其他事务是否能够读取这些数据,取决于数据库的隔离级别:

  1. READ UNCOMMITTED(读未提交)

    • 其他事务可以读取被锁定的行,即使这些行尚未提交。
  2. READ COMMITTED(读已提交)

    • 其他事务只能读取已提交的数据,不能读取未提交的修改。
  3. REPEATABLE READ(可重复读)

    • 其他事务只能读取已提交的数据,不能读取未提交的修改。
  4. SERIALIZABLE(串行化)

    • 其他事务只能读取已提交的数据,且可能因严格的隔离级别而无法读取被锁定的行。

总结

  • 读取未提交数据 :仅在 READ UNCOMMITTED 级别下允许。

  • 读取已提交数据 :在 READ COMMITTEDREPEATABLE READSERIALIZABLE 级别下允许,但 SERIALIZABLE 可能限制更多。

因此,SELECT ... FOR UPDATE 加锁后,其他事务能否读取数据取决于数据库的隔离级别。

相关推荐
当归10242 分钟前
sql server 无法将一列变成自动增长
java·服务器·数据库
好记性+烂笔头3 分钟前
高频 SQL 50 题(基础版)_1084. 销售分析 III
数据库·sql
庖丁科技11 分钟前
为什么「上下文检索」是提升 RAG 系统问答准确度的关键?
数据库·后端
容器( ु⁎ᴗ_ᴗ⁎)ु.。oO22 分钟前
仿12306项目(4)
java·数据库·后端
Lill_bin1 小时前
算法策略深度解析与实战应用
数据结构·数据库·算法·oracle·贪心算法·线性回归·动态规划
王大雏2 小时前
阿里云云监控资源告警常用模板
android·java·数据库
@孤随2 小时前
《MySQL三大核心日志解析:Undo Log/Redo Log/Bin Log对比与实践指南》
android·mysql·adb
leegong231113 小时前
哪些培训课程适合学习PostgreSQL中级认证知识?
数据库·学习·postgresql
阿芯爱编程3 小时前
数据库高级面试题
数据库·后端
八股文领域大手子3 小时前
[场景题]如何实现购物车
数据库·oracle