一、四大属性ACID
1、原子性(Atomicity):事务中的所有操作是一个整体,要么全部成功,要么失败回滚。(undo log --> mvcc)
2、一致性(Consistency):多个事务同时执行,其执行结果必须与按某一串行顺序执行的结果一致。
3、隔离性(Isolation):不受其他事务干扰的程度,事务执行的中间结果对其他事务必须是透明的。(四种隔离级别)。(锁)
4、持久性(Durability):事务对数据的影响是永久的。 (redo log)
二、四种隔离级别
第一种:读未提交(Read Uncommitted)
TxA: 1 update ----> 3 commit
TxB: 2 update ----> 4 rollback
TxA的更新丢失
第二种:读已提交(Read Committed)
TxA: 2 select ----> 4 commit
TxB: 1 update ----> 3 rollback
TxA读到的是脏数据
第三种:可重复读(Reaptalble Read )(MySQL默认隔离级别)
TxA: 1 select ----> 4 select
TxB: 2 update ----> 3 commit
TxA 两次读的值不一样
第四种:串行化(Serializable)
TxA: 1 select ----> 4 select
TxB: 2 insert ----> 3 commit
TxA查询到的更多记录
三、Spring事务传播行为(propagation)
传播行为,是指方法之间的调用,事务如何传递。
PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。默认项。
PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。