Spring事务的隔离级别和传播特性

本文介绍了数据库事务的五个隔离级别及其对并发控制的影响,包括读未提交、读已提交、可重复读、序列化等,同时阐述了七种事务传播行为如何在不同场景下发挥作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

五个事务隔级别分别为:lsolation的属性值

在一个典型的应用程序中,多个事务同时运行,经常会为了完成他们的工作而操作同一个数据。并发虽然是必需的,但是会导致一下问题:

  • 脏读(Dirty read)-- 脏读发生在一个事务读取了被另一个事务改写但尚未提交的数据时。如果这些改变在稍后被回滚了,那么第一个事务读取的数据就会是无效的。
  • 不可重复读(Nonrepeatable read)-- 不可重复读发生在一个事务执行相同的查询两次或两次以上,但每次查询结果都不相同时。这通常是由于另一个并发事务在两次查询之间更新了数据。
  • 幻影读(Phantom reads)-- 幻影读和不可重复读相似。当一个事务(T1)读取几行记录后,另一个并发事务(T2)插入了一些记录时,幻影读就发生了。在后来的查询中,第一个事务(T1)就会发现一些原来没有的额外记录。

1,default   默认的事务隔离级别

2,read_uncommitted     读未提交,一个事务可以操作另外一个未提交的事务,不能避免脏读,不可重复读,幻读,隔离级别最低,并发性 能最高


3,read_committed  读已提交,一个事务不可以操作另外一个未提交的事务, 能防止脏读,不能避免不可重复读,幻读。

4,repeatable_read  保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。 

5,serializable   隔离级别最高,消耗资源最低,代价最高,能够防止脏读, 不可重复读,幻读。


七个事务的传播行为

1,propagation_required    如果一个事务存在,则支持当前事务,如果不存在,则创建新的事务


2,propagation_supports   如果一个事务存在,则支持当前事务,如果不存在,则非事务的方法运行

3,propagation_mendatory    如果一个事务存在,则支持当前事务,如果存在,则抛出异常

4,propagation_requires_new   总是要开启一个新的事务,如果事务存在,将该事务挂起

5,propagation_not_supported    总是非事务方法运行,并挂起所有的事务

6,propagation_never    总是非事务方法运行,如果事务存在则抛出异常

7,propagation_nested  某一个事务存在,则运行在一个嵌套的事务中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值