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

相关推荐
zx28596340013 分钟前
Laravel10.x重磅升级:核心特性全解析
mysql·gateway·智能路由器
PaperData15 分钟前
2000-2025年《中国县域统计年鉴》pdf+excel版(附赠面板数据)
数据库·人工智能·数据分析·pdf·经管
冷小鱼21 分钟前
从关系模型(SQL)基石到AI与信创时代的智能查询语言
数据库·sql
庞轩px28 分钟前
致远互联实习复盘:一条SQL替代300次循环查询,组织架构选择器从5秒降到300毫秒
java·sql·mysql·mybatis·实习经历·n+1问题·join联表查询
LLON erva31 分钟前
Redis-配置文件
数据库·redis·oracle
童话ing32 分钟前
【Redis】026 互联网大厂 Redis 面试高频题
数据库·redis·面试
钰衡大师33 分钟前
Activiti 7 工作流技术文档
java·数据库·spring boot
Treh UNFO37 分钟前
nginx的重定向
大数据·数据库·nginx
jvvz afqh1 小时前
mysql用户名怎么看
数据库·mysql
eDEs OLDE1 小时前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++