事务的四大特征和五个隔离级别

事务的四大特征

1.原子性(Atomicity):一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做
2.一致性(Consistency):事务完成后,符合逻辑运算。数据不会因为事务的执行而遭到破坏,事务前后数据的完整性必须保持一致
3.隔离性(Isolation):一个事物的执行,不受其他事务的干扰,即并发执行的事物之间互不干扰
4.持久性(Durability):一个事物一旦提交,它对数据库的改变就是永久的

五个隔离级别

1.default:默认的事务隔离级别,跟具体的数据有关,mysql默认的事务隔离级别是repeatable_read
2.read_uncommitted: 读未提交,一个事务可以感知或者操作另外一个未提交的事务,可能会出现脏读、不可重复读、幻读
3.read_committed:读已提交,一个事务只能感知或者操作另一个已经提交的事务,可能会出现不可重复读、幻读
4.repeatable_read:可重复读,能够避免脏读,不可重复读,不能避免幻读
5.serializable:串行化,隔离级别最高,消耗资源最低,代价最高,能够防止脏读, 不可重复读,幻读。

脏读:可以读取到另一个事务尚未提交的数据

起初隔离级别为read uncommitted(读未提交):a,b两个会话,分别开启两个事务,然后a向b转了500元钱,但a未提交该事务, 此时b查看,发现多了500,然后a回滚事务,b再查看账户,发现根本就没有多500。

不可重复读:在一个事务中,两次查询的结果不一致

如果我们此时将隔离级别提升为read committed(读已提交),便可避免脏读。同样b两个会话,分别开启两个事务,然后a向b转了500元钱, 但a未提交该事务,此时b查看,依旧是原钱数。但此时,如果a提交事务,b再去查看,发现此时多了500。

可重复读

如果我们此时将隔离级别提升为repeatable read(可重复读),可以避免脏读和不可重复读的发生。同样a提交事务,b再去查看,发现依旧是原钱数,b只能结束当前事务,在开启一个新事务,才能查询到数据的变化,这便避免了不可重复读。 但是如果a事务在提交前插入了几条数据,b事务在第二次读的时候读出来多了几条,这便是幻读

串行化

如果我们设置了seriizable串行化,就相当于锁表,某一时间内只允许一个事务访问该表。

不可重复读和幻读比较

两者有些相似,但是前者针对的是update或delete,后者针对的insert。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值