spring事务

本文介绍了Spring事务的管理,包括事务的四大特性——原子性、一致性、隔离性和持久性,详细讲解了各种隔离级别如脏读、不可重复读和幻读等,并讨论了Spring事务的7种传播特性。同时,文章提到了原生JDBC事务处理和Spring配置事务的方式。
摘要由CSDN通过智能技术生成

事务

spring事务

是操作数据库的最小工作单元,为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行,或都不执行,事务是一组不可在分割的操作集合

一起成功(事务提交),一起失败(事务回滚)

spring事务的四大特性:(一原持久隔离)

一致性:事务执行后,数据库与其他业务保持一致,无论是成功还是失败。如转账业务,参与转账的两个账号余额之和应该是不变的

原子性:事务操作是不可再分割的原子单位,事务中所有的操作要么执行全部成功,要么全部执行失败。

持久性:一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

隔离性:隔离性指在并发操作中,不同事物之间应该隔离开来,使每个并发中的事务不会相互干扰。

spring事务的隔离级别情况

脏读

小花读取了小明未提交的新事务,然后小明回滚了,小花就读取了错误的数据(小明的事务在中间回滚了,实际上小花,小明的钱款并未改变)

脏读

不可重复读

一个事务范围内多次查询却返回了不同的数据,这是由于查询间隔,被另一个事务修改并提交了。

不可重复读

幻读

也是不可重复读的特性导致

a事务中有查询和修改两个动作,查询只有一条数据和修改以为也只有一条,但是在同一时间b事务插入了一条数据并提交事务,a事务的修改就修改了两条然后才提交事务。所以再次查询就修改了两条数据产生了幻读

幻读

第一类事务丢失(回滚事务丢失)

小明这个事务取50,然后中途放弃把50又还回去(回滚),这时如花这个事务放了50进去,跟回滚重合如花这个事务就丢失了。

第一类事务丢失

第二类事务丢失(提交覆盖丢失)

小花开个事务放50进去,这时小明也开了个事务放50进去,导致小明覆盖了小花,小花事务丢失,总金额只有150

提交事务覆盖丢失

spring事务的隔离级别5种

DEFAULT

默认隔离级别,每种数据库支持的事务隔离级别不一样,MySQL默认采用的REPEATABLE_READ隔离级别,Oracle默认采用的READ_COMMITTED隔离级别。

READ_UNCOMMITTED

读未提交,即能够读取到没有被提交的数据,所以很明显这个级别的隔离机制无法解决脏读、不可重复读、幻读中的任何一种,因此很少使用

READ_COMMITED

读已提交,允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。

REPEATABLE_READ

重复读取,即在数据读出来之后加锁,类似"select * from XXX for update",明确数据读取出来就是为了更新用的,所以要加一把锁,防止别人修改它。除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生

SERLALIZABLE

串行化,最高的事务隔离级别,不管多少事务,挨个运行完一个事务的所有子事务之后才可以执行另外一个事务里面

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值