ACID:

原子性(Atomicity):整个数据库事务是不可分割的工作单位,事务中所有操作都成功,整个事务才算成功

一致性(Consistency):从一种一致状态到下一种一致状态

隔离性(Isolation):事务提交前对其他事务都不可见

持久性(Durability):事务只要提交,就是永久性的

 

事务的分类(类似于事务的传播属性):

扁平事务(Flat Transactions)

带有保存点的扁平事务(Flat Transactionswith Savepoints)

链事务(Chains Transactions)

嵌套事务(Nested Transactions)

分布式事务(Distributed Transactions)

扁平事务:

       所有操作都是同一层次,要么都执行,要么都回滚,@Transactional注解中默认的传播属性:

propagation = Propagation.REQUIRED----支持当前事务,若没有当前事务,则新建一个

带有保存点的扁平事务:

        允许事务在执行过程中回滚到同一个事务中较早的状态,即事务是回滚到指定的状态,不是整个回滚。保存点(Savepoint)用来通知系统应该记住事务当前的状态。且是递增的。扁平事务其实也隐式的含有一个保存点,所以回滚就全部回滚,提交就全部提交。

InnoDB 事务(读MySQL技术内幕-InnoDB存储引擎)

java中手动处理事务时,好像是可以做到这种方式,目前没有找到@Transactional注解可以处理这种事务

 

链事务:

       上一个事务的提交和下个事务的操作合并成一个原子,即可以理解为将多个事务合并成一个事务,所以也就只能回滚到最近的一个保存点(和带保存点的扁平事务的区别)

InnoDB 事务(读MySQL技术内幕-InnoDB存储引擎)

      @Transactional注解中propagation = Propagation.REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起  

       InnoDB 事务(读MySQL技术内幕-InnoDB存储引擎)

      如上图所视,serviceC中的addC()会回滚,但是addA()和addB()均将数据插入数据库

      虽然是同样的效果,但是和链事务还是不同,链事务是将上一个事务提交了触发第二个事务的开始,而此注解是挂起当前,新建一个,所以只是回滚新建的事务

 

嵌套事务(Nested Transaction):

       由一个顶层事务控制着各个层次的事务。顶层事务下的都叫子事务

       任何子事务都是在顶层事务提交后才会真正的提交

       树中任意一个事务的回滚会引起它的所哟子事务一起回滚,所哟子事务不具有持久性D

        InnoDB 事务(读MySQL技术内幕-InnoDB存储引擎)

         

 

相关文章: