woieha320r的博客

事务

事务特性(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)