Spring事务

文章介绍了数据库事务的四种隔离级别及其可能导致的问题,包括脏读、不可重复读和幻读。事务的ACID特性(原子性、一致性、隔离性、持久性)也得到阐述。此外,讨论了事务的传播行为以及在编程中如何使用@Transational注解来管理事务,并列举了几种可能导致事务失效的情况,如方法访问修饰符、内部调用、不支持事务的数据库等。
摘要由CSDN通过智能技术生成

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事务支持的异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值