Spring之事务管理总结
什么是事务
- 在数据库 一组操作中 要么全部成功 要么全部失败 简单说 就是增删改查 要么全部成功 要么全部失败
事务有什么特性ACID
- 原子性:原子性不可分割 整个操作要么都成功 要么都失败
- 一致性:数据 事务前后的数据保持一致
- 持久性:指事务一旦被提交 就无法被修改
- 隔离性:两个事务之间 并发访问的情况
隔离有什么问题
- 脏读:一个事务读到另一个事务没有提交的数据
- 不可重复读:一个事务读到另一个事务已经提交的事务(update)
- 幻读:一个事务读到另一个事务已经提交的事务(insert)
隔离级别有哪些
- 读未提交:一个事务读到另一个事务没有提交的数据(存放3个问题 解决0个问题)
- 读已提交:一个事务读到另一个事务已经提交的数据(存放2个问题 解决1个问题 脏读)
- 可重复读:在一个事务中读到的数据是重复的(存放1个问题 解决2个问题 脏读 不可重复读)
- 串行化:单事务(存放0个问题 解决3个问题 脏读 不可重复读 幻读)
对比:
性能:读未提交 > 读已提交 > 可重复读 > 串行化
安全:串行化 < 可重复读 < 读已提交 < 读未提交
默认隔离级别:
——mysql:可重复读
——Oracle:读已提交(Oracle有自己的一套安全管理事务)
事务管理平台管理器【重点】
在spring-tx里面有一个事务管理平台管理器中 有一个getTransaction方法 参数是一TransactionDefinition事务定义
事务定义中有隔离级别 传播行为等
什么是传播行为?
一个事务调用另一个事务 事务共享问题