事务
事务特性(ACID
原子性:中间中断则数据回退
一致性:有点儿类似线程可见性吧
隔离性:同一时间只能一个事务访问同一数据
持久性:事务结束后结果不可回退
MySQL事务隔离级别
读未提交级别
-
脏读:读到了另一个事务未提交的数据
- 解决方案:读已提交级别
-
不可重复读:因另一个事务修改值而导致前后两次读取不一致
- 解决方案:可重复读级别(默认级别)
-
幻读:在未提交前被其他事务修改了已操作过的值,操作成功,但看起来像未生效
- 解决方案:串行化级别
Spring事务
· 就像Spring Cache,是屏蔽具体实现的统一抽象
传播机制
指的是在同线程方法调用链上,spring把Connection和TransactionStatus存在ThreadLocal上
· 并入:合并进已有的事务,提交回滚是同步的
· 嵌入:内层跟随外层回滚,内层回滚不影响外层
必须有
-
参与已有事务,否则新开
-
并入(PROPAGATION_REQUIRED)
-
嵌入(PROPAGATION_NESTED)
-
-
参与已有事务,否则异常
-
并入(PROPAGATION_MANDATORY)
-
不参与已有事务,必须新开,有则等待(ROPAGATION_REQUIRES_NEW)
-
可有可无:已有事务则并入,没有拉倒(PROPAGATION_SUPPORTS)
禁止有
-
已有事务则异常(PROPAGATION_NEVER)
-
已有事务则等待(PROPAGATION_NOT_SUPPORTED)