事务的隔离级别和传播行为

什么是事务

事务全称叫数据库事务,是数据库并发控制时的基本单位,它是一个操作集合,这些操作要么不执行,要么都执行,不可分割。

Spring事务并发的问题

脏读 :某一个事务, 读取了另外一个事务未提交的数据
不可重复读 :(前后多次读取,事物内容不一样)某一个事务, 对同一个数据前后读取的结果不一致
幻读 :(前后多次读取,数据总量不一致)某一个事务, 对同一个表前后查询到的行数不一致

事务的传播行为
1)什么是事务的传播行为
事务的传播行为,可以拆成两部分理解,即事务的传播,和事务的行为。指的是,当有两个或以上的方法同时声明为事务方法(事务方法:加了事物管理中的增删改方法)时,如果在一次程序执行过程中,这些事务方法彼此间相互调用。

事务的传播:指的是嵌套调用的多个事务方法,是否会共享同一个事务,即调用者所处的事务是否会传播给被调用者(前提:两者都是属于事务方法)。
事务的行为:主要指的就是事务的提交或者回滚。

2)事务的传播行为
required:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
supports:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
mandatory :如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
requires_new:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
not_supported:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
never:以非事务方式运行,如果当前存在事务,则抛出异常。
nested:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 required

事务隔离级别
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(读未提交) 、Read committed (读已提交)、Repeatable read(可重复读) 、Serializable (串行化),这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。

1)Read uncommitted(读未提交):该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。

2)Read committed (读已提交):该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。

3)Repeatable read(可重复读):该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。

4)Serializable (串行化):所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 在该隔离级别下事务都是串行顺序执行的,MySQL 数据库的 InnoDB 引擎会给读操作隐式加一把读共享锁,从而避免了脏读、不可重读复读和幻读问题。

事物的特性
1)Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。(事务是应用中不可再分的最小执行体)

2)Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。在转账的时候不会出现一当少钱了,另一方没有增加的情况。(事务执行的结果,须使数据从一个一致性状态,变为另一个一致性状态)

3)Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。(各个事务的执行互不干扰,任何事务的内部操作对其他的事务都是隔离的)

4)Durability(持久性):事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库。(事务一旦提交,对数据所做的任何改变都要记录到永久存储器中)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值