当前位置: 首页 > news >正文

READ COMMITTED(读已提交)是数据库事务的四种标准隔离级别之一(其余为:READ UNCOMMITTED、REPEATABLE READ、SERIALIZABLE)

READ COMMITTED(读已提交)是数据库事务的四种标准隔离级别之一(其余为:READ UNCOMMITTED、REPEATABLE READ、SERIALIZABLE)。其核心语义是:一个事务只能读取到其他事务已经成功提交(COMMIT)的数据,不能读取未提交的中间状态(即避免脏读)

✅ 优点:

  • 防止脏读(Dirty Read):不会读到其他事务回滚前的临时修改。

⚠️ 局限性:

  • 存在不可重复读(Non-Repeatable Read):同一事务中,对同一行数据多次读取,可能因其他事务在两次读之间提交了更新(UPDATE)或删除(DELETE),导致结果不一致。
  • 存在幻读(Phantom Read):同一事务中,执行相同范围查询(如SELECT * FROM t WHERE id > 10),可能因其他事务插入/删除符合该条件的新行而返回不同数量或内容的记录(注意:是否视为幻读取决于具体数据库实现;例如 PostgreSQL 在 READ COMMITTED 下允许幻读,而 Oracle 通过多版本控制(MVCC)避免了幻读但仍有不可重复读)。

实现机制(典型如 PostgreSQL、Oracle、SQL Server 默认):

  • 基于多版本并发控制(MVCC),每个查询看到的是事务开始时刻已提交的最新快照;
  • 或基于行级锁 + 读锁释放时机(如 SQL Server 的锁机制),读操作加共享锁,但读完立即释放,不持续到事务结束 → 导致后续读可能看到新提交值。

示例(不可重复读):

-- 事务A(READ COMMITTED)BEGIN;SELECTbalanceFROMaccountWHEREid=1;-- 返回 1000-- 此时事务B执行并提交:UPDATE account SET balance = 1500 WHERE id = 1;SELECTbalanceFROMaccountWHEREid=1;-- 可能返回 1500(不可重复读!)COMMIT;

READ COMMITTED 与 REPEATABLE READ 在防止不可重复读方面的本质区别在于“一致性快照(consistent snapshot)的创建时机和作用范围不同”

READ COMMITTED

  • 每次 SELECT 都建立一个新快照(以该查询开始时刻已提交的最新数据为准);
  • 同一事务内多次读取同一行,若中间有其他事务提交了修改,则后续 SELECT 可能读到新值 →无法防止不可重复读
  • 快照粒度是语句级(statement-level)

REPEATABLE READ

  • 整个事务第一次 SELECT 时创建一个全局快照,并在整个事务生命周期内复用该快照
  • 后续所有读操作(包括相同或不同 SELECT)均基于此初始快照,无视其他事务后续的提交 →可防止不可重复读
  • 快照粒度是事务级(transaction-level)

📌 补充说明(关键实现差异):

  • PostgreSQL / Oracle(MVCC 实现):REPEATABLE READ 级别下严格复用事务启动时的快照,不仅防不可重复读,通常也防幻读(因新插入行的事务ID大于快照时间点,不被可见);
  • MySQL InnoDB(MVCC + Next-Key Locks):REPEATABLE READ 级别下虽用事务启动快照防不可重复读,但仍可能遭遇幻读(如 INSERT 新行),因此通过间隙锁(Gap Lock)和临键锁(Next-Key Lock)在 DML 操作时阻塞插入,从而在大多数场景下间接避免幻读(但纯快照 SELECT 仍可能幻读,需配合加锁读如SELECT ... FOR UPDATE)。

简言之:

READ COMMITTED 的“一致性”止于单条语句;REPEATABLE READ 的“一致性”贯穿整个事务——这是二者防不可重复读能力差异的根本原因。

http://www.jsqmd.com/news/933227/

相关文章:

  • 从BMP文件头到像素遍历:手把手教你用C语言和VS2022解析一张图片的完整数据
  • 解锁虚拟化边界:深度解析VMware macOS解锁器的核心技术原理与实践
  • 告别命令行!用Genero Studio 2.40.11汉化版,5分钟搞定TIPTOP 4GL/4FD开发环境
  • SpringBoot3项目里,从AntPathMatcher切换到PathPattern,我踩了这些坑
  • 江苏环保设备价格如何? - mypinpai
  • 从宿舍组网到小型办公室:用两台华为交换机搞定VLAN划分与跨设备通信
  • 别再只用针孔模型了!手把手教你用Scaramuzza多项式搞定全向相机标定(附Python代码)
  • 用OpenMV和Arduino做个智能门锁:人脸识别+舵机控制保姆级教程
  • 别再只调PID了!用前馈控制大幅提升PMSM位置环响应速度(Simulink仿真对比与参数设计详解)
  • Visio画图效率翻倍:巧用‘侧括弧’形状库,让你的技术图表更专业
  • 惠普OMEN笔记本性能解锁终极指南:告别官方软件臃肿,用开源工具重获硬件控制权
  • 手把手教你用DSP28337D的ePWM Trip-Zone保护电机驱动(附C2000Ware源码调试技巧)
  • 为机器学习项目设计专用编程语言:从Python痛点看未来ML工程范式
  • 2026年五常大米口碑排名,哪些品牌值得信赖? - myqiye
  • 南昌全屋定制品牌推荐,还林整木靠谱吗? - mypinpai
  • 别再乱放了!Android14编译时,如何精准控制你的模块输出到system、vendor还是product分区?
  • 从3sigma到Prophet:基于机器学习的时序指标异常检测方案实践
  • 基于Tinkercad的莫尔斯码通信系统设计与实现
  • 告别手写公式烦恼:三个免费在线工具,截图/手写一键转LaTeX(附保姆级教程)
  • 从矩阵求和到状态更新:图解Blelloch并行扫描如何成为Mamba.py的‘加速引擎’
  • 为什么92%的用户删不干净Sora 2水印?深度逆向其v2.1.3水印注入协议,附Python自动化剥离脚本
  • 2026年西安高性价比架子鼓培训公司排名 - myqiye
  • 避坑指南:mmsegmentation自定义数据集训练中常见的5个报错及解决方法
  • CAD 2021 高效绘图前必做的7项基础设置(含文件自动保存位置修改)
  • 如何用ComfyUI Essentials插件10倍提升你的AI绘画效率?终极工具包揭秘 [特殊字符]
  • 无人机数据处理避坑指南:用C++和Eigen库搞定摄影测量中的欧拉角转换(附完整代码)
  • Android14编译实战:手把手教你配置Android.bp,让模块精准输出到system/product/vendor/odm分区
  • 【Sora 2点云生成技术白皮书】:20年CV专家首曝工业级三维重建新范式(附实测精度对比表)
  • 用Python和YOLOv5给DNF写个自动刷图脚本:从截图到驱动级按键的完整流程
  • 玻璃钢水箱的价格是多少,语琪玻璃钢的呢? - 工业推荐榜