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 如果当前事务存在,则嵌套事务执行