【Spring事务的介绍1——什么是事务】

事务的介绍(1)

什么是事务

事务的概念
事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起想系统提交,要么一起执行、要么一起不执行;事务是一组不可再分割的的操作集合(工作逻辑单元)

最常见的例子就是转账:
假设,当前小明账户有1000元,小红账户有1000元,此时小明给小红进行转账1000元,意味着小明账户-1000元,小红账户+1000元。

开启事务
第一步:从小明账户扣1000元
第二步:从小红账户加1000元
事务提交

上面的例子任何步骤出现了问题,都会导致事务回滚。如果不加事务的话,在第二步给小红加1000的时候发生了异常就会导致小明那边已经扣了1000元,但是小红那边没加上1000元从而引发数据不一致


事务的四大特性**

1.原子性(Atomicity) :事务中所有的操作是不可再分割的原子单位。事务中所有的操作,要么一起执行成功,要么一起执行失败(不成功)。不能一部分成功一部分失败

2.一致性(Consistency):事务的执行后,数据库的状态与其他业务规则保持一致。拿上面的转账举个例子:小明给小红转1000元,无论转账是否成功,账户的总额都是2000不能多也不能少(能量守恒: 能量既不会凭空产生,也不会凭空消失)。

3.隔离性(Isolation) : 隔离性是指在并发操作中,不同的事务之间已改隔离起来,使每个并发中的事务不会互相干扰(主要还是看设置的隔离级别 下面会讲到)。

4.持久化(Durability) : 一旦事务提交成功,事务中的所有的数据操作都必须持久化到数据库中,即使提交够 数据库挂了,在数据库重启后,也要保证通过某种机制进行恢复数据。


原生的JDBC事务处理

try {
	// 设置为 手动开启 默认是 true: 自动提交
	connection.setAutoCommit(false);
	// 数据的操作 insert update delete
	connection.commit(); // 提交事务
}catch (Exception ex) {
	// 回滚
	connection.rollback()
}finally {
	connection.setAutoCommit(true);
}

事务的隔离级别

数据库事务的隔离级别分4种,由低到高分别为:
1.Read uncommitted
2.Read committed
3.Repeatable read
4.Serializable
而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读,事务丢失

脏读: (读取到了未提交的新事务的数据,然后被回滚了)
事务A读取了事务B中尚未提交的数据。如果事务B回滚,则事务A读取到了错误的数据

不可重复读: (读取了提交的新事务,指更新操作)
不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于查询间隔期间数据被其他事务修改并提交了

幻读:(读取了提交的新事务,指增删操作)
事务A多次读取数据的间隔中,事务B对数据进行了新增操作,导致事务A多次读取数据不一致

第一类事务丢失: (称为回滚丢失)

比如A事务和B事务同时执行同一个数据,然后B事务已经提交了,然后A事务回滚了,这样子B事务的操作就因A事务的回滚而丢失了。

第二类事务丢失: (称为覆盖丢失)
比如A事务和B事务同时执行同一个数据,两个事务同时还取到一个数据,然后B事务先提交了。然后A事务也提交了就把B事务提交的数据覆盖了。
举个例子:
A事务和B事务都要执行扣减C商品库存,A事务和B事务都获取到C商品的库存为100。

Read uncommitted
读未提交,顾名思义就是一个事务可以读取别的事物为提交的的数据。可能会读到脏数据 简称:脏读。

Read committed
读提交,顾名思义,就是一个事务要等到另外一个事务提交后才能读取数据。会产生不可重复读。

Repeatable read
重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。可能出现幻读。

Serializable
Serializable是最高的事务隔离级别,在该隔离级别下,事务串行系列化执行,可避免脏读、不可重复读、幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不建议使用。

大多数数据库默认的事务隔离级别是 Read committed。
比如Sql Server、Oracle、Mysql的默认隔离级别是Read committed

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值