1、事务隔离级别
(1)读未提交:产生 脏读,不可重复读,幻读 (此为最低隔离级别)
(2)读提交 :产生 不可重复读,幻读
(3)可重复读:幻读 mysql默认隔离级别
``(4)序列化:事务顺序执行,效率差,执行时其他事务需要等待 (最高隔离级别)
2、事务存在的问题:
(1)脏读:事务A读取事务B未提交的数据,事务A读取数据后,事务B执行了回滚,未提交数据回滚,事务A读取到事务B未提交的数据就是脏读;
(2)不可重复读:事务A对同一数据,读取两次的结果不同
(3)幻读:事务A对表的数据一列执行修改操作,事务B同时新增一条数据,事务A修改完,进行查询,发现有一条数据没有被修改
3、事务特点(ACID)
原子性,一致性,隔离性,持久性
4、事务的传播
(1)如果当前存在事务,则加入当前事务,如果当前不存在事务,则创建一个事务;(默认事务)
(2)如果当前存在事务,则加入当前事务,如果不存在事务,则以非事务的方式继续运行;
(3)如果当前存在事务,则加入当前事务,如果不存在事务,则抛出异常;
(4)重新创建一个新的事务,如果当前存在事务,则延缓当前事务;
(5)以非事务的方式运行,如果当前存在事务,则暂停当前事务;
(6)以非事务的方式运行,如果当前存在事务,则抛出异常;
(7)如果没有,就新建一个事务,如果有,就在当前事务中嵌套其他事务;
5、事务的使用 @Transational
(1)注解事务只能作用到方法上,不能作用到代码块,手写事务可以作用到代码块
(2)手写事务,事务提交,根据事务执行返回判断是否需要回滚,回滚判断放到finally
6、事务失效的原因:
(1)事务作用方法没有使用public修饰
(2)在方法中使用this调用
(3)数据库本身不支持事务
(4)配置的事务传播类型不支持事务
(5)多线程调用
(6)抛出的异常不是spring事务支持的异常