← ReJava · 学习目录

REJAVA / LEARNING NOTES

第11课速查:事务边界与隔离级别

随时回查术语、规则和示例;完整解释见对应课程。

Java 17 / 21更新于 2026.10.12约 3 分钟阅读

根据课程材料整理

本次更新说明
  • 整理为公开学习笔记,保留要点、对照表与练习入口。

完整课程 · 课后问答 · 课程目录 · 术语

审批操作的一条主线

同一连接开始 transaction(事务)→核对业务条件→更新状态+新增记录→全部成功才提交;任一步失败,停止成功流程,请求回滚并报告错误。

autocommit(自动提交)默认开启,不显式分组时,两条普通数据修改分别提交。COMMIT(提交语句)与 ROLLBACK(回滚语句)只控制当前事务;已提交结果不能再靠回滚撤销。

ACID(事务四项属性)

属性记住什么
atomicity(原子性)成组提交或撤销;不等于任意报错自动回滚整组
consistency(一致性)满足约束与业务规则,正确逻辑仍由应用负责
isolation(隔离性)并发读写的可见性与干扰按级别约束
durability(持久性)成功提交的保存能力,要结合可靠性设置和硬件

三种现象与两种常用级别

dirty read(脏读):读到别人未提交的修改。non-repeatable read(不可重复读):同一事务重复读同一行,别人提交使值改变。phantom read(幻读):重复同样条件,符合条件的记录集合变化。

级别普通一致性读
READ UNCOMMITTED(读未提交)可能脏读,不按本课已提交快照规则判断
READ COMMITTED(读已提交)每次读新快照
REPEATABLE READ(可重复读)同事务复用首次一致性读的快照;本事务自己的写入可见
SERIALIZABLE(可串行化)更强隔离;关闭自动提交时普通查询转为共享锁定读

读数例子: A先普通查询得到0,B改为1并提交,A同事务再次普通查询。A不写、不加锁时,读已提交得到1,可重复读仍为0。如果A开始事务后尚未首次读,B已提交,A第一次读在两种级别下都能看到1。

容易背错的四句话

错误说法改成这样
插入报错,整个事务肯定都撤销普通重复键错误只撤销该语句;业务失败明确走回滚分支
开始事务时就固定了快照普通开始语句不等于首次一致性读;显式开始时建快照是另一用法
可重复读里所有操作都读旧值普通一致性读、锁定读、写操作要分开,自己的写入还可见
看见待审批,就没人能抢先处理普通读不锁住审批权;需要并发控制并在保护下检查状态

MVCC(多版本并发控制)利用旧版本信息支持一致性读取;SELECT … FOR UPDATE(查询并加更新锁)读取最新可用记录并加锁,冲突时可能等。锁在事务结束时释放,不要让事务等待用户确认。

完整表达的顺序

业务要成组修改什么 → 同连接的开始、提交与失败回滚 → 两次读取的时间顺序 → 隔离级别与快照 → 普通读和锁定读的边界。真实项目事实、拟定方案、课程里的教学推演分开说。

隔日复测见课程末尾;可选的数据库实验不是学习新课的前提。

依据:官方事务控制、四项属性、错误处理、一致性读、隔离级别、锁定读。本页读数是基于官方规则的教学推演,不是实测输出。