什么是事务,了解事务的隔离级别和传播行为。

 什么是事务

事务(Transaction)是访问并可能更新数据库中各项数据项的一个程序执行单元(unit)。 事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。

 事务结束有两种,事务中的步骤全部成功执行时,提交事务。如果其中一个失败,那么将会发生回滚操作,并且撤销之前的所有操作。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。

 事务是恢复和并发控制的基本单位。

  事务具有四个特征:原子性、一致性、隔离性和持久性。这四个特征通常称为ACID。

事务的四大特性
原子性(Atomicity):事务不可再分,要么都执行,要么都不执行。
一致性(Consistency):事务执行前后,数据的完整性保持一致,即修改前后数据总量是一样的大概。
隔离性(Isolation):一个事务执行过程中,不会受到其他事务干扰。
持久性(Durability):事务一旦结束,对数据库的影响是永久的。数据持久化到数据库中。

在并行程序中可能会出现的问题:

脏读:当 A事务 读取 B事务 未提交的数据后,B事务 回滚,导致 A事务 读取到的数据为脏数据。
不可重复读:A事务 读取第一次读取数据后,B事务 对该数据进行了修改并提交,A事务 再去读取数据时,前后数据结果不一致。
幻读:A事务 读取第一次读取数据后,B事务 又插入或删除了新的数据并提交,A事务 再去读取数据时,前后结果不一致。

 Spring事务的五个隔离级别 

ISOLATION_DEFAULT:使用数据库默认的事务隔离级别。
读未提交:ISOLATION_READ_UNCOMMITTED:事务最低的隔离级别,允许一个事务可以读取另一个事务未提交的数据。 会产生脏读、不可重复读和幻读。
读已提交:ISOLATION_READ_COMMITTED: 保证一个事务只能读取另一个事务修改并提交后的数据,不能读取未提交的数据。防止脏读。
可重复性:ISOLATION_REPEATABLE_READ:保证一个事务不能更新另一个事务修改但尚未提交的数据。可以避免脏读和不可重复读。
序列化:ISOLATION_SERIALIZABLE:序列化执行所有事务。都避免了,但是效率极低。

Spring事务的七个传播行为 

其实就是两个方法,一个方法调用了另一个方法,其中一个方法有事务,那么另一个方法的事务是新建还是怎么样,用传播机制来规定。
有七种传播机制,分别是:

在同一个事务中:

PROPAGION_REQUIRED(默认):支持当前事务,不存在则创建一个新的事务。

翻译过来叫必须的,意思是如果有事务就加入事务,没有的话就新建一个。
PROPAGION_SUPPORTS:支持当前事务,不存在就以非事务方式运行。

翻译过来叫支持,意思是如果当前存在事务,则加入事务,如果不存在事务,则以非事务运行
PROPAGION_MANDATORY:支持当前事务,如果不存在,抛出异常。

翻译过来叫强制,意思是如果当前存在事务,则运行在当前事务中,如果不存在事务,则抛出异常
不同事务中:

PROPAGIN_REQUIRES_NEW:当前存在事务则挂起,创建一个新事务。

翻译过来叫必须是新的,意思是新建事务,如果存在事务,那么把当前事务挂起
NOT_SUPPORTED:当前存在事务则挂起,以非事务方式运行。

翻译过来叫不支持,意思是以非事务运行,如果存在事务,则把当前事务挂起。
PROPAGION_NEVER:当前存在事务抛出异常,非事务方式运行。

翻译过来叫从不,意思是以非事务运行,如果当前存在事务,则抛出异常
PROPAGION_NESTED:当前存在事务则嵌套事务执行。

翻译过来叫嵌套的,意思是如果当前存在事务则在嵌套事务内执行。如果没有事务则执行REQUIRED类似的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
事务传播行为指的是事务对其他事务的可见性和影响范围。在数据库系统中,有四种常见的事务传播行为: 1. REQUIRED:默认的传播行为。如果当前没有事务存在,则新建一个事务。如果已经存在事务,则加入到当前事务中。 2. REQUIRES_NEW:每次都创建一个新的独立事务,暂停当前事务(如果存在),并在新事务完成后恢复之前的事务。 3. SUPPORTS:如果当前存在事务,则加入到当前事务中;如果没有事务存在,则以非事务方式执行。 4. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则挂起该事务,执行完操作后再恢复之前的事务隔离级别指的是多个并发执行的事务之间的隔离程度,主要为了解决并发访问数据库时可能出现的问题。常见的隔离级别有: 1. READ UNCOMMITTED(未提交读):一个事务可以读取到其他未提交的事务所做的修改,可能会导致脏读、不可重复读和幻读的问题。 2. READ COMMITTED(已提交读):一个事务只能读取到其他已提交的事务所做的修改,解决了脏读问题,但可能会出现不可重复读和幻读。 3. REPEATABLE READ(可重复读):一个事务在执行期间多次读取同一数据时,能够保证读取的数据是一致的。解决了不可重复读问题,但可能会出现幻读。 4. SERIALIZABLE(串行化):最高的隔离级别,通过对事务进行串行执行来避免并发问题,保证了数据的一致性,但牺牲了并发性能。 不同的传播行为隔离级别适用于不同的场景,开发人员需要根据实际需求选择合适的配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值