spring~3

1、什么是事务?

事务是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败

2、事务的特性

原子性:强调事务的不可分割

一致性:事务的执行的前后数据的完整性保持一致

隔离性:一个事务执行的过程中,不应该受到其他事务的干扰

持久性:事务一旦结束,数据就持久到数据库中

3、如果不考虑隔离性引发安全性问题

脏读:一个事务读到了另一个事务的未提交的数据

不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致

虚幻读:一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致

4、解决读问题:设置事务隔离级别

未提交读:脏读,不可重复读,虚度都有可能发生

已提交读:避免脏读。但是不可重复读和虚读有可能发生

可重复读:避免脏读和不可重复读。但是虚读有可能发生

串行化读:避免以上多有问题

Mysql:默认可重复读

Oracle:默认已提交读

5、事务的传播行为

保证在同一个事务中

PROPAGATION_REQUIRED  支持当前事务,如果不存在,就新建一个(默认)

PROPAGATION_SUPPORTS  支持当前事务,如果不存在,就不是用事务

PROPAGATION_MANDATORY  支持当前事务,如果存在,抛出异常

保证不在同一个事务中

PROPAGATION_REQUIRED_NEW  支持当前事务存在,挂起当前事务,创建一个新的事务

PROPAGATION_NOT_SUPPORTED  以非事务方式运行,如果有事务存在,挂起当前事务

PROPAGATION_NEVER       以非事务方式运行,如果有事务存在,抛出异常

PROPAGATION_NESTED      如果当前事务存在,则嵌套事务执行

原文地址:https://www.cnblogs.com/xiaoxli/p/9593271.html