Spring 事务的理解

对Spring 事务的理解

什么是事务?

事务其实就是一件事,要做就做完,中途出问题了就要恢复成原状态(等于没有做)。

事务的4大特性

  1. 原子性:事务必须是一个不可分割的整体。
  2. 一致性:执行完数据库操作后,数据不会被破坏。例:如果从A账户转账到B账户,不可能因为A账户扣了钱,而B账户没有价钱。
  3. 隔离性:对同一条数据的操作,不同事务之间应该隔离(提交之前,数据变化仅仅在事务内部,与外部隔离)。事务隔离级别分别为:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZBLE,从左到右,隔离级别越来越高,并发性越来越差,安全性越来越高。
  4. 持久性:当我们执行了一条insert语句后,数据库必须要保证有一条数据永久地存放在磁盘中。

原子性是基础,隔离性是手段,持久性是目的,真正的老大即使一致性,数据不一致了就隔离也就失败了。

JDBC不同事务隔离级别要解决的问题

  1. 脏读:当前事务中访问到了其他事务还没有提交的数据,并且在此基础上做了其他的数据操作。
    在这里插入图片描述
  2. 不可重复读:当前事务读取到了其他事务已经提交修改的数据(其他事务修改前读取了一次,修改后又读取了一次,导致同一个事务中两次读取的数据不一样)
    在这里插入图片描述
  3. 幻读:当前事务中读取到了其他事务提交新增的数据集(其他事务新增前读取了一次,新增后也读取了一次,导致同一事务中读取到的结果集行数不同)
    在这里插入图片描述

事务隔离级别

在这里插入图片描述

完善事务管理功能

Spring 解决的只是方法之间的事务传播,比如A方法是一个事务,B方法是一个事务,A方法里面包含B方法。那么事务是怎么传播的?

**PROPAGATION_REQUIRED:**最常用也是spring默认是事务传播级别,A方法执行的时候已经有事务了,所以B方法的事务会注入到A方法事务里面来(合成一个事务)。

Spring关于事务的附加功能
1、事务超时(Transaction Timeout):为了解决事务时间太长,消耗太多的资源,所以故意给事务设置一个最大时常,如果超过了,就回滚事务。
------ timeout=“1”

2、只读事务(Readonly Transaction):为了忽略那些不需要事务的方法,比如读取数据,这样可以有效地提高一些性能
------ propagation=“REQUIRED”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值