事务的传播机制是指添加事务时的策略。
传播机制共有以下几种:
PROPAGATION_MANDATORY: 当前事务必须在一个已有事务环境中执行, 否则抛出异常
PROPAGATION_REQUIRED:
PROPAGATION_REQUIRES_NEW:
PROPAGATION_NESTED:
这三种传播机制不管当前是否有事务, 都会新建一个事务,区别是:
PROPAGATION_REQUIRED:当前没有事务就新建事务, 有的话就加入当前已有事务
PROPAGATION_REQUIRES_NEW:如果当前有事务, 则挂起当前事务
PROPAGATION_NESTED: 如果当前有事务, 则在嵌套事务内执行
PROPAGATION_SUPPORTS:如果当前没有事务,就以非事务的方式执行,如果有,则加入当前事务。
PROPAGATION_NOT_SUPPORTED: 以非事务的方式执行, 如果当前有事务,将当前事务挂起。
PROPAGATION_NEVER:以非事务方式执行, 如果当前有事务,则将事务挂起。
Spring默认的事务传播行为是PROPAGATION_REQUIRED
事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度,是指并发情况下由于数据变动而造成的脏读、幻读、不可重复读等等
幻想读:T1读取的结果集被T2修改了,引发原因是T2新插入了数据,避免方法为使用隔离级别:SERIALIZABLE
不可重复读:T1读取记录的时候, T2修改了这条记录,T1再次读发现不一致。 避免方法为使用隔离级别:REPEATABLE READ
脏读: T1修改了记录,还没有提交,T2读取了该记录,此时T1回滚,T2读取的数据无效,避免方法为使用隔离级别:READ COMMITTED
READ UNCOMMITTED不可以避免以上三种情况
Oracle默认的隔离级别是READ COMMITTED