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

相关推荐
小江的记录本12 小时前
【ORM框架】MyBatis核心原理、ORM思想、MyBatis vs JPA
java·数据库·后端·spring·spring cloud·oracle·mybatis
zgl_2005377912 小时前
源代码:跨数据库通用“字段级”数据血缘解析与图形化(2/3:标注信息的拆解、检验、保存)
大数据·数据库·数据仓库·sql·数据挖掘·etl·嵌入式实时数据库
BugShare13 小时前
告别来回切换,Navop:一站式整合数据库、SSH、终端与 AI 的开发运维工作台
运维·数据库·ssh
深念Y13 小时前
微服务抽取路线图:从胖单体到 ARM 集群
前端·arm开发·数据库·后端·微服务·云原生·架构
雪花凌落的盛夏13 小时前
PostgreSQL 14 主备集群实战部署教程:流复制 + 双机 WAL 归档 + 自动化备份
数据库·postgresql·自动化
树下水月13 小时前
python3 使用canal监听后,kafka数据同步从mysql到clickhouse数据库 完整复盘
数据库·mysql·kafka
深念Y13 小时前
QQ 数据库解密与聊天记录导出 — 技术文档
数据库·sqlite·手机·数据恢复·逆向·二进制·qq
程序员-Benothing13 小时前
什么是批量数据入库?相比单条插入有什么优势?
数据库
我滴老baby13 小时前
部署 Portainer CE,把日志、镜像和数据卷搬进网页
数据库·人工智能·架构
东风破_13 小时前
博客数据库进阶设计:点赞、收藏、评论、标签与文件表怎么建?
后端·mysql