开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情
写在前面
作为一个java程序员,spring应该都不会陌生了吧?
对于大部分程序员来说,spring的入门,估计跑起一个框架,熟悉一下开发的流程,基本上就掌握spring框架的开发了。
随着开发年限的变大,我们不能仅仅是掌握到这个地步,更应该深入的学习spring框架。
这不,接下来就是spring框架的学习之旅了,希望可以帮助到大家。
一、事务支持
1.1 事务回顾
1.1.1 事务介绍
事务: 指的是逻辑上一组操作, 组成这个事务的各个执行单元,要么一起成功,要么一起失败!
事务的特性(ACID) :
- 原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
- 一致性 ( Consistency )
一致性是指事务必须使数据库从一个一致性状态变换到另一一个致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
- 隔离性( Isolation )
隔离性是当多个用户并发访问数据库时, 比如操作同张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
- 持款性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会失提交事务的操作。
1.1.2 事务并发问题(隔离性导致)
在事务的并发操作中可能会出现一些问题:
- 脏读: 一个事务读取到另一个事务未提交的数据。
- 可重复读: 一个事务因读取到另一个事务已提交的数据,导致对同一条记录读取两次以上的结果不一致。update操作
- 幻读: 一个事务因读取到另一个事务已提交的数据。导致对同一张表读取两次以上的结果不一致。insert、delete操作
1.1.3 事务隔离级别
为了避免上面出现的几种情况,在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同
-
四种隔离级别: 现在来看看MySQL数据库为我们提供的四种隔离级别(由低到高) :
- Read uncommitted (读未提交) :最低级别,任何情况都无法保证。
- Read committed (读已提交) :可避免脏读的发生。
- Repeatable read (可重复读) :可避免脏读、不可重复读的发生。
- Serializable (串行化) : 可避免脏读、不可重复读、幻读的发生。
-
默认隔离级别
大多数数据库的默认隔离级别是Read Committed (RC) , 比如Oracle、DB2等。
MySQL数据库的默认隔离级别是Repeatable Read ( RR ) 。
- 注意事项:
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。
对于多数应用程序, 可以优先考虑把数据库系统的隔离级别设为Read Comitted, 它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读这些并发问题, 在可能出现这类问题的个别场合, 可以由应用程序采用悲观锁或乐观锁来控制。
好了,以上就是Spring学习之旅-组件支撑篇(2) 的全部内容了。
今天就先到这里了,后面的内容,留下次分享了,先溜了!!!^_^
如果觉得写得不错的,帮忙点赞、评论、收藏一下呗!!!