Spring Framework(5)-事务总结

本文详细介绍了数据库事务的基本概念及Spring框架中事务管理的具体实现,包括事务的四大特性(ACID)、并发事务带来的问题及其解决方案,并阐述了Spring事务的作用层面、管理方式、隔离级别和传播行为。

点击查看更多Spring文章

 

目录

一.数据库中的事务机制

1.什么是事务

2.事务四大特性(ACID)

1.Atomic-原子性

2.Consistency-一致性

3.Isolation-隔离性

4.Durability-持久性

3.并发事务带来的四大问题

1.脏读

2.不可重复读

3.幻读

4.更新丢失

Q:不可重复读和幻读有什么不同?

二.Spring中的事务机制

1.Spring中的事务作用于哪个层

2.Spring中事务管理的三种方式

3.Spring事务的隔离级别

1.TransactionDefinition.ISOLATION_DEFAULT

2.TransactionDefinition.ISOLATION_READ_UNCOMMITTED

3.TransactionDefinition.ISOLATION_READ_COMMITTED

4.TransactionDefinition.ISOLATION_REPEATABLE_READ

5.TransactionDefinition.ISOLATION_SERIALIZABLE

4.Spring事务事务传播行为

1.TransactionDefinition.PROPAGATION_REQUIRED

2.TransactionDefinition.PROPAGATION_SUPPORTS

3.TransactionDefinition.PROPAGATION_MANDATORY

4.TransactionDefinition.PROPAGATION_REQUIRES_NEW

5.TransactionDefinition.PROPAGATION_NOT_SUPPORTED

6.TransactionDefinition.PROPAGATION_NEVER

7.TransactionDefinition.PROPAGATION_NESTED


一.数据库中的事务机制

1.什么是事务

事务指的是一组操作,要么都执行,要么都不执行。最经典的例子就是转账的例子:A向B转账,如果A扣款了B就必须得到钱。但是如果在这个过程中发生了系统错误,A没有扣款,那么B也不会得到钱,这就是扣款和加钱这一组操作的事务性。

2.事务四大特性(ACID)

 

1.Atomic-原子性

事务是最小的单位,事务内的操作要不都成功,要不都失败。

2.Consistency-一致性

事务执行前后的数据被其他事物读取到时都是一致的。

3.Isolation-隔离性

多个事务之间同时执行也不会相互干扰,各事务相对独立。

4.Durability-持久性

事务执行之后,它对数据的改变是持久的,不会发生回退。

3.并发事务带来的四大问题

1.脏读

A事务读取了B事务的未提交的脏数据,导致A事务之后的操作都是错误的。 

2.不可重复读

A事务读取数据后,B事务执行更新操作,导致A事务无法读取到原先的结果。 

3.幻读

A事务读取数据后,B事务新添加了数据,导致A事务无法读取到原先的结果。 

4.更新丢失

指的是A事务回滚而导致B事务的更新被撤销。

Q:不可重复读和幻读有什么不同?

不可重复读指的是A事务读取某条数据期间,B事务改变了该条数据,导致A的前后读取结果不一致,要解决这个问题只需要加行级锁,使A事务开启期间读取某条数据,其他事务不可对该条数据进行更改即可。

而幻读指的是A事务读取多条数据期间,B事务新增了数据,导致A的前后读取结果不一致,要解决这个问题需要加表级锁,使A事物读取多条数据期间,其他事务都无法更改该表的数据。

二.Spring中的事务机制

1.Spring中的事务作用于哪个层

Spring中的事务作用与业务层,在业务处理时如果有调用数据库操作,但是当业务处理过程中发生异常,则会将这个过程中涉及到的写数据库操作回滚。

2.Spring中事务管理的三种方式

  1. 编码式事务管理,通过Spring提供tx包下的事务类来进行事务的管理,但这属于硬编码的方式,不推荐使用。
  2. 基于XML的配置式事务管理,适用于需要管理的类较多的场合。
  3. 基于注解的配置式事务管理,适用于需要管理的类较少的场合。

3.Spring事务的隔离级别

Spring提供了事务的隔离级别,一般情况下选用的是默认隔离级别,即以数据库的隔离级别为准。(InnoDB的默认事务隔离级别为可重复读)。

1.TransactionDefinition.ISOLATION_DEFAULT

使用数据库默认的隔离级别。

2.TransactionDefinition.ISOLATION_READ_UNCOMMITTED

读未提交读,会导致脏读、不可重复读和幻读的产生。

3.TransactionDefinition.ISOLATION_READ_COMMITTED

读已提交读,防止了脏读的产生,但仍会产生不可重复读和脏读问题。

4.TransactionDefinition.ISOLATION_REPEATABLE_READ

可重复读,可以防止脏读、不可重复读的产生,但还是会产生幻读的问题。这里一般数据库使用了行锁。

5.TransactionDefinition.ISOLATION_SERIALIZABLE

可序列化,防止了全部并发问题的产生,采用表锁,性能低下。

4.Spring事务事务传播行为

Spring事务传播行为指的是在代码发生异常时,Spring事务提供的策略,有以下几种:

1.TransactionDefinition.PROPAGATION_REQUIRED

如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

2.TransactionDefinition.PROPAGATION_SUPPORTS

如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

3.TransactionDefinition.PROPAGATION_MANDATORY

如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

4.TransactionDefinition.PROPAGATION_REQUIRES_NEW

创建一个新的事务,如果当前存在事务,则把当前事务挂起。

5.TransactionDefinition.PROPAGATION_NOT_SUPPORTED

以非事务方式运行,如果当前存在事务,则把当前事务挂起。

6.TransactionDefinition.PROPAGATION_NEVER

以非事务方式运行,如果当前存在事务,则抛出异常。

7.TransactionDefinition.PROPAGATION_NESTED

如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值