事务四大特性及隔离级别

今天在使用数据库的时候,接触到了事务,这也是面试中常问的问题,于是写了这篇笔记记录一下

事务的四大特性

事务的四大特性简称ACID

1原子性(Atomicity)

原子性是指事务的所有操作要么一起成功,要么一起失败,不能中断

比如你转账给别人,你这边扣了钱,别人也要收到钱

2一致性(Consistency)

一致性指的是事务在操作前后,数据库的数据需要保持前后一致

比如你和你爸金额的钱一共1000,你爸不管转账给你多少钱,你们的钱加起来还是1000

3隔离性(Isolation)

隔离性指的是一个事务在对同一个数据操作的时候是不受其他的事务影响的,每个事务都隔离起来,特别是在高并发的情况下,关于隔离级别下文会有介绍

4持久性(Durability)

持久性指的是事务对数据库进行操作了事务提交了,不管是什么操作,只要操作了都会保存到数据库中,不能回滚

比如你在公司中接收任务,你会拿一些实质的东西记录下是某个领导给你派的任务,就算那个领导忘记了到时候你也有证据可以查看

事务的隔离性和隔离级别

介绍完上面的四大特性,现在专门来讲一下隔离性

如果不考虑隔离性的话会出现以下问题:

1脏读

脏读指的是一个事务读取了另一个事务没有提交的数据,没有提交就代表还有更改的可能,所以这部分数据很大的可能会是脏数据

2不可重复读

不可重复读指的是事务在多次访问同一份数据的时候,读取到的数据内容并不相同,这是因为在多次读取的期间有其他事务更改了数据并提交了

很多时候不可重复读并不是问题,只要拿到最后读取到的数据就可以了

3幻读

幻读指的是一个事务多次读取同一份数据的时候,读取到的数据数量不一致,类似出现了幻觉

不可重复读的重点在于update和delete,幻读重点在于insert

隔离级别

有了以上的问题就需要有解决的方法,有4种隔离级别去解决

1.读未提交(Read Uncommitted):最低级别,以上的问题都解决不了

2.读已提交(Read Committed): 可以解决脏读的问题

3.可重复读(Repeatable Read):确保事务在多次读取一份数据的时候,其他事务不能对这份数据进行修改,可以解决脏读和不可重复读的问题

4.串行化(Serializable):级别最高,所有事务不可并发执行,只能串行,可以解决脏读,不可重复读,幻读三个问题

以上四种隔离级别串行化的级别最高,但是它的性能也是最低的,凡事都有两面性,隔离级别越高越能保持数据的完整性和一致性,但是就需要牺牲性能,所以在选择隔离级别的时候就需要慎重选择,很多情况只需要读已提交的隔离级别即可,而MySQL中默认的隔离级别可重复读

Spring Boot是一个开源的、适用于创建微服务的Java应用程序框架。它提供了简化的配置和开发过程,其中包括对事务处理的支持。Spring Boot的事务管理有以下四大特性隔离级别: 1. 原子性(Atomicity):事务是原子操作的基本单位,要么全部完成,要么全部回滚。在Spring Boot中,通过将需要进行事务管理的方法标记为@Transactional来实现原子性。 2. 一致性(Consistency):事务执行前后,数据库的数据始终保持一致性状态。如果事务执行失败,数据将会被回滚到事务开始之前的状态。 3. 隔离性(Isolation):事务之间相互隔离,一个事务的执行不应该对其他事务产生影响。在Spring Boot中,可以通过设置隔离级别来控制事务隔离程度。常见的隔离级别包括读未提交、读已提交、可重复读和串行化。 4. 持久性(Durability):事务一旦提交,其结果将持久保存到数据库中,并且不会受到后续的故障或系统恢复的影响。 隔离级别决定了事务之间的相互影响程度,以及事务可能遭遇的并发问题。在Spring Boot中,可以通过设置隔离级别来控制事务的行为。读未提交的隔离级别是最低级别的隔离,它允许多个事务之间相互读取未提交的数据;读已提交的隔离级别要求一个事务只能读取已经提交的数据;可重复读的隔离级别保证在同一事务内的多次读取操作得到的结果是一致的;而串行化的隔离级别则是最高级别的隔离,它要求事务之间完全串行执行,避免了并发问题,但可能降低了并发性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值