事务的四个特性ACID
A:原子性,C:一致性,I:隔离性,D:持久性。
事务的四个隔离级别:
1.读未提交:两个事务A,B。A有select语句,B有update操作,B未执行commit时,A事务执行select会读取B未提交的数据。
2.读已提交:A查询余额1000,B查询余额1000,Bupdate余额100元,B提交。A查询余额100元。
3.可重复读:A查询余额1000,B查询余额1000,Bupdate余额100,B提交,A查询余额1000.
4.顺序读:事务只能一个接一个的执行,不能并发。
脏读:读到未提交的数据。
不可重复读:一次事务中两次读取相同的列的数据不一样。
可重复读:一次事务中两次读取相同列的数据一样,针对update操作。
幻读:一次事务中同样的查询条件,查询的结果第二次比第一次多,针对insert操作。
Spring的事务的传播特性:
1.PROPAGATION_REQUIRED:如果当前存在事务,方法将加入到这个事务,不存在,就新建一个事务。
2.PROPAGATION_REQUIRED_NEW:当前存在事务,挂起当前事务,新建一个新的事务。
3.PROPAGATION_MANDATORY:当前方法必须运行在事务中,如果不存在事务,就抛出异常。
4.PROPAGATION_NEVER:当前方法不需要运行在事务,如果是事务调用,就抛出异常。
5.PROPAGATION_SUPPORTS:当前存在事务就在事务中运行,不存在就正常执行。
6.PROPAGATION_NOT_SUPPORTED:当前方法不支持事务执行, 如果存在事务,挂起事务,执行完后在继续执行事务。
7.PROPAGATION_NESTED:当父事务调用到这个方法,此时会创建一个savepoint,启动一个嵌套事务执行该方法。如果方法失败,回滚到savepoint点。嵌套事务是外部事务的一部分,如果外部事务失败了,会全部回滚。