1 Transaction
A原子性
C一致性
I 隔离性
D 持久性
事务并发引起的问题
脏读、不可重复读、虚(幻读)读
数据库的隔离级别
读未提交、读已提交、可重复读、串行化
脏读 不可重复读 虚读
读未提交 × × ×
读已提交 √ × ×
可重复读 √ √ ×
串行化 √ √ √
mysql默认的隔离级别是什么:可重复读(但是不会导致虚读问题)
2 Spring事务
2.1核心接口
PlatFormTransactionManager
TransactionStatus
TransactionDefinition
2.2 PlatFormTransactionManager
平台事务管理器
DataSourceTransactionManager
HibernateTransactionManager
2.3 TransactionStatus
事务的状态2.4 TransactionDefinition
事务的定义:事务的名称、只读、隔离级别、传播行为、超时时间
2.4.1 传播行为Propagation
多个方法之间如何共享事务 → 方法之间包含调用关系
methodA、methodB
methodB(){
methodA();
}
2.4.1.1 REQUIRED(默认)
如果没有事务则新建一个;如果包含事务,则加入进来,作为一个事务。
一荣俱荣,一损俱损:要么一起提交,要么一起回滚。
methodB调用methodA
methodB发生异常:都回滚
methodA发生异常:都回滚
2.4.1.2 REQUIRES_NEW
如果没有事务则新建一个;如果包含事务,仍然新增一个新的事务。
自私型事务:外围不能影响内部,内部可以影响外围。
methodB调用methodA
methodB发生异常:B回滚,A正常提交
methodA发生异常:A、B都回滚
2.4.1.3 NESTED(内部方法相较于外部方法不重要)
如果没有事务则新建一个;如果包含事务,则以嵌套事务的方式运行。
无私型事务:外围影响内部,内部不会影响外围。
PDD → 吸引新用户
register(){
@Nested
sendcoupon();
}
3 事务案例
以下所有的案例都需要使用到事务管理器 → 依赖于DataSource
3.1 依赖
3.2 TransactionTemplate