Spring 事务
1.事务隔离级别:
事务:逻辑上的一组操作要么同时成功,要么同时失败;
特性:原子性,一致性,隔离性,持久性
在不考虑隔离性的前提下,事务存在如下问题:
脏读: 一个事务读取到了另一个事务中尚未提交的数据
不可重复度: 一个事务中两次读取的数据内容不一致,要求的是一个事务中多次读取时数据是一致的,这是事务**update**时引发的问题
虚读,幻读: 一个事务中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致的,这是**insert或delete**时引发的问题
---------
解决:设置隔离级别
Read unCommitted :什么都解决不了
Read committed :解决脏读 Oracle
Repeatable Read :解决脏读和不可重复读 Mysql
Serializable :解决所有但是不用
一般使用默认值
2.超时时间:
使用默认值 -1
意思为,什么时候执行完,什么时候提交或回滚事务
3.事务的传播行为:
REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选择(默认值) 解决增删改 SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务) 针对查询
简单来说:在【同一个业务】当中【后者是否需要事务】,【前者有没有事务】,有就加进去玩,没有,如果我需要就自己开一个事务,如果不需要就以非事务执行
4.是否是只读事务
只读事务 :对查询有效(查询)
非只读事务 :对增删改有效(增删改)
readOnly :true(只读事务)或 false(非只读事务)
重要★★:
增删改操作配置:
传播行为:REQUIRED
是否只读:false
查询操作配置:
传播行为:SUPPORTS
是否只读:true