个人简单总结

什么是事务
事务是让一组动作要不全都执行成功,要不都不执行。
事务特性
ACID
原子性:事务是一个不可分割的工作单位,事务的操作要不都发生,要不都不发生。
一致性: 事务执行前后保证数据的完整性。
隔离性:当前事务内操作的数据,不会被其他事务操作所影响。
持久性:事务提交后,会持久保存到数据库中。
四种事务隔离级别
读未提交:事务中未提交的数据可以被其他事务读取到
读提交:事务只能读取到被其他事务提交后的数据
可重复读:在同一事务中多次读取同一字段,数据必须保持一样。
串行:事务串行执行。
不考虑隔离性,引发的安全问题
脏读:一个事务中读取了另外一个事务改写但是未提交的数据。
不可重复读: 在同一事务中多次读取同一数据,放回结果不同。
幻读:一个事务读取了几行记录后,另一个事务插入了一些记录,幻读就发生了。在后来查询中,第一个事务就发现了原理没有的记录。

不可重复读和幻读的差别:不可重复读表现在重复读取某个字段,结果不同了,幻读表现在重复读某几行,多出了几行或者少了几行。

什么是spring的事务传播行为

事务传播行为用来描述由某一个事务传播行为修饰的方法被嵌套进另一个方法时的事务如何传播。

大白话总结:
比如一个复杂的业务层方法,里边包含了两个或两个以上的业务方法,这些方法都定义了事务。让这些事务执行的关系。

1) 将它们放到同一个事务中执行  
2)让它们互不干扰,各干各的事务
3)让外围方法出现异常,可以回滚某些事务,也不影响某些事务 
4) 内层事务回滚,不影响外围方法事务。
spring的事务传播行为(7种)

PROPAGATION_REQUIRED: 如果当前没有事务,则新建一个事务;如果已经存在一个事务,则加入到这个事务中。这是常见的。
PROPAGATION_SUPPORT: 支持当前事务,如果没有事务,就以非事务运行。
PROPAGATION_MANDATORY: 使用当前事务,如果不存在,则抛出异常。
PROPAGATION_REQUIRES_NEW: 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORT: 以非事务运行,如果当前存在事务,把事务挂起。
PROPAGATION_NEVER: 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED: 如果当前存在事务,则在嵌套事务中执行,如果没有事务则和REQUIRE一样。