声明式事务 - @Transactional
Atomicity
原子性
事务是不可分割的工作单位
Consistency
一致性
数据库状态保持一致
Isolation
隔离性
事务之间相互隔离
Durability
持久性
提交后永久保存
有事务则加入,无则新建
最常用,适合大多数业务方法
总是新建事务,挂起当前事务
适合日志记录、独立子任务
有事务则加入,无则以非事务运行
适合查询方法
以非事务运行,挂起当前事务
不需要事务的操作
必须在事务中运行,否则抛异常
强制要求事务
不能在事务中运行,否则抛异常
确保无事务
| 级别 | 脏读 | 不可重复读 | 幻读 | 说明 |
|---|---|---|---|---|
| READ_UNCOMMITTED | ❌ | ❌ | ❌ | 读未提交,性能最高 |
| READ_COMMITTED | ✅ | ❌ | ❌ | 读已提交,Oracle默认 |
| REPEATABLE_READ | ✅ | ✅ | ❌ | 可重复读,MySQL默认 |
| SERIALIZABLE | ✅ | ✅ | ✅ | 串行化,性能最低 |
✅ = 防止该问题 | ❌ = 可能出现该问题
创建订单时触发异常,观察事务回滚效果