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

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

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

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

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

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

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

脏读:当 A事务 读取 B事务 未提交的数据后,B事务 回滚,导致 A事务 读取到的数据为脏数据。
不可重复读:A事务 读取第一次读取数据后,B事务 对该数据进行了修改并提交,A事务 再去读取数据时,前后数据结果不一致。
幻读:A事务 读取第一次读取数据后,B事务 又插入或删除了新的数据并提交,A事务 再去读取数据时,前后结果不一致。
2. Spring事务的五个隔离级别
ISOLATION_DEFAULT:使用数据库默认的事务隔离级别。
ISOLATION_READ_UNCOMMITTED:事务最低的隔离级别,允许一个事务可以读取另一个事务未提交的数据。 会产生脏读、不可重复读和幻读。
ISOLATION_READ_COMMITTED: 保证一个事务只能读取另一个事务修改并提交后的数据,不能读取未提交的数据。防止脏读。
ISOLATION_REPEATABLE_READ:保证一个事务不能更新另一个事务修改但尚未提交的数据。可以避免脏读和不可重复读。
ISOLATION_SERIALIZABLE:序列化执行所有事务。都避免了,但是效率极低。
3. Spring事务的七个传播行为
在同一个事务中:
PROPAGION_REQUIRED(默认):支持当前事务,不存在则创建一个新的事务。
PROPAGION_SUPPORTS:支持当前事务,不存在就以非事务方式运行。
PROPAGION_MANDATORY:支持当前事务,如果不存在,抛出异常。
不同事务中:
PROPAGIN_REQUIRES_NEW:当前存在事务则挂起,创建一个新事务。
PROPAGION_SUPPORTS:当前存在事务则挂起,以非事务方式运行。
PROPAGION_NEVER:当前存在事务抛出异常,非事务方式运行。
PROPAGION_NESTED:当前存在事务则嵌套事务执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
事务隔离级别是指多个事务并发执行时,一个事务对其他事务的可见性和影响程度的控制。Spring框架支持四个事务隔离级别: 1. 未提交读(READ UNCOMMITTED):最低级别,一个事务可以读取未提交的数据,会导致脏读,不可重复读和幻读问题的出现。 2. 提交读(READ COMMITTED):一个事务只能读取已提交的数据,可以避免脏读问题,但可能导致不可重复读和幻读问题。 3. 可重复读(REPEATABLE READ):在一个事务中多次读取同一数据时,结果保持一致,避免了不可重复读问题。但仍然可能存在幻读问题。 4. 串行化(SERIALIZABLE):最高级别,通过确保事务串行执行来避免脏读、不可重复读和幻读问题。但会降低并发性能。 传播机制是指在调用多个事务方法时,如何处理事务传播Spring框架提供七种传播行为: 1. REQUIRED:如果当前没有事务,就创建一个新事务;如果已存在事务,则加入该事务。 2. SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方法执行。 3. MANDATORY:强制要求存在当前事务,如果没有事务就抛出异常。 4. REQUIRES_NEW:创建一个新事务,并暂停当前事务(如果有)。 5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将其挂起。 6. NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。 7. NESTED:在当前事务的控制下执行一个嵌套事务,如果不存在当前事务,则创建一个新事务。嵌套事务可以独立提交或回滚,但在外部事务提交时才会生效。 通过选择合适的事务隔离级别传播机制,可以确保事务的数据一致性、安全性和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值