Spring事务管理(详解+实例)
http://www.mamicode.com/info-detail-1248286.html
传统的事务分为ACID
A:原子性,表示一个事务的多个操作要么同时成功,要么同时失败
C:一致性,表示一个原理的业务处理不能存在部分成功,部分失败的情况
I:隔离性,多个事务执行时,数据需要隔离
D:持久性,事务执行完成后,数据持久化,可以恢复
spring的事务定义分为如下几个部分:
传播机制、隔离机制、超时时间、是否只读、回滚机制
7种事务传播机制:
propogation_required:当前方法必须运行在事务中,如果事务存在,则加入该事务,否则开启一个新事务
propogation_required_new:当前方法必须运行在自己的事务中,当前方法执行时,该事务挂起
propogation_supports:当前方法不需要事务上下文,如果存在事务则加入
propogation_not_supported:当前方法不支持事务上下文,如果存在事务则挂起
propogation_mandatory:当前事务必须运行在事务中,如果不再存事务则报异常
popogation_never:当前事务不能运行在事务当中,如果存在事务则报异常
propogation_nested:事务嵌套,如果存在当前事务,该方法运行在嵌套事务中,嵌套的事务可以独立的提交或回滚,如果不存在事务开启一个新事务
事务的隔离级别:
事务的隔离级别定义了一个事务可能受其他并发事务的影响程度
并发事务影响的问题:
1.脏读:一个事务读取了并发事务尚未提交的数据,如果该数据回滚则数据就无效了
2.不可重复读:多次读取数据同一数据结果不一致
3.幻读:多次执行同一查询,结果不一致
五大隔离级别:
1.ISOLATION_DEFAULT:使用后端数据库默认的隔离级别
2.ISOLATION_READ_UNCOMMITTED:读未提交,最低的隔离级别,允许读取尚未提交的数据变更
3.ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据
4.ISOLATION_REPEATABLE_READ:可重复读,同一个字段多次读取结果一致
5.ISOLATION_SERIALIZABLE:串行读,最高隔离机制,完全锁定事务相关表