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 加锁后,其他事务能否读取数据取决于数据库的隔离级别。

相关推荐
程序猿乐锅6 分钟前
【MySQL | 第八篇】MySQL 视图
数据库·mysql
jieyucx1 小时前
SQL 查询终极高阶通鉴:从零基础拆解到工业级多表联查、窗口函数与索引优化
数据库·sql
ai_coder_ai2 小时前
论 NoSQL 数据库技术及其应用
数据库·nosql
AOwhisky3 小时前
Redis 学习笔记(第一期):概述、安装配置与核心理论
运维·数据库·redis·笔记·学习·云计算
ytttr8733 小时前
C# 定时数据库备份工具
开发语言·数据库·c#
睡不醒男孩0308233 小时前
自建 Prometheus+Grafana 与 CLUP 深度监控 PG 集群有什么区别?
数据库·oracle
就叫_这个吧3 小时前
IDEA Mybatis xml文件,实现sql语句联想,自动填入补充
xml·mysql·intellij-idea·mybatis
AOwhisky3 小时前
Redis 学习笔记(第四期):高可用与集群(哨兵 + Cluster + 容器化)
linux·运维·数据库·redis·笔记·学习·缓存
猫猫聚会Ing4 小时前
数据库设计 Prompt 提示词 - 构建与迭代
数据库
上海云盾-小余4 小时前
源站隐藏实战:规避裸 IP 被直接攻击的完整方案
数据库·网络协议·tcp/ip