spring事务的传播属性概述:
1:required:如果当前方法已经在事务中则使用当前事务,如果没有则新建事务。
2:requires_new:不管当前方法是否在事务中都会创建一个新的事务。
3:supports:如果当前方法在事务中则使用当前事务,如果不在也不会创建事务
4:not_supports:如果当前方法在事务中则将当前事务挂起,直到方法执行结束。
5:mandatory:如果当前方法不在事务中则报错
6:naver:如果当前方法在事务中则报错(与mandatory相反)
7:nested:如果当前方法不在事务中则创建事务,在事务中则创建一个事务嵌套在当前事务中。
spring事务的隔离类型
1:ISOLATION_DEFAULT:表示使用数据库隔离级别(spring默认的事务隔离类型)
2:ISOLATION_READ_UNCOMMITTED:这是最低的事务隔离级别(允许读取修改后未提交的数据)可能会出现的:脏读、幻读、不可重复读这几个错误中的某一个。
3:ISOLATION_READ_COMMITTED :这个是第二低的事务隔离级别(允许读取事务提交后的数据,可以解决脏读问题)可能会出现:幻读和不可重复读的问题
4:ISOLATION_REPEATABLE_READ:这个是第二高的事务隔离级别(对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,解决了不可重复读和脏读)可能会出现幻读
5:ISOLATION_SERIALIZABLE:最高的隔离级别,(完全服从ACID的隔离级别,解决了脏读、不可重复读以及幻读,也是最慢的事务隔离级别,通常是通过完全锁定事务相关的数据库表来实现的)
注:脏读,幻读,不可重复读的定义
1:脏读:读取了其他事务未提交的数据后其他事务将数据回滚,导致数据错误
2:不可重复读:在两次或两次以上获取统一数据的间隔之间其他事务修改了数据,导致两次或两次以上查询出来的数据不同
3:幻读:在两次或两次以上获取数据量的间隔之间其他事务新增或者删除了相关数据,导致两次或多次查询出来的数据数不同