文档章节

数据库事务的隔离级别

Garrey
 Garrey
发布于 2017/08/08 13:47
字数 1007
阅读 17
收藏 0
  • 隔离性

        经常会遇到事务的并发执行,并发的事务是互相隔离开的,一个事务的执行不会被其他事务的执行干扰。也就是说,不同的事务操作相同的数据时,每个事务都会有各自完整的数据空间,即一个事务内部的操作及使用的数据对其他的事务来言是隔离的,并发执行的各个事务之间不能互相干扰。

        标准SQL规范中,定义了四个隔离级别,不同的隔离级别对事务的处理不同。四种隔离级别:        1.未授权读 2.授权读 3.可重复读 4.串行化 。

  • 未授权读(读未提交)

        未授权读,Read Uncommitted也称为读未提交,是最低的隔离级别,此隔离级别会发生脏读

        比如事务A正在对mysql数据库中的某一数据data进行更新操作,假设事务A后续还有一些操作,所以事务A还未提交,,此时有个新事务B进来了,事务B可以访问该数据data,也就是事务B能读到事务A还未提交的数据。比data初始值是0,此时事务A和事务B同时来,事务A对data进行加法操作,递增加+1直到data=10,事务B能够看到data从0、1、2、3......、10当中的所有值,对data出现的这一系列值的读取就是读未提交的数据。

  • 授权读(读已提交)

        Read Committed,理解了读未提交,那么读已提交就很好理解了,只读取已经被事务提交的数据,不会读到未提交的数据,比读未提交隔离级别高。比如事务A也是对data进行+1操作,相当于事务A对data上了锁,其他的事务暂时不能访问,等到提交事务后,释放掉锁,事务B去读data也就只能读到data=10这个已经提交的数据。

        读已提交会出现不可重复读,不可重复读的意思就是,在同一个事务中读取同一条数据的可能不一致。例如:事务B先对读取到data是0,事务B进行一些其他操作C,事务B还未提交,此时事务A对data进行+1更新操作,事务A已提交,事务B操作C完成后,需要再次读取data,此时读取的值为10。事务B在一次事务中对data两次读取出现了不一样的值,就是不可重复读

        出现不可重复读的原因是由于update操作引起的,在一个事务中的两次读取之间另一个事务进行update操作就会产生不可重复读。

  • 可重复读

        Repeatable Read,可重复读取,比读已提交隔离级别高。针对上面的例子出现了不可重复读的情况,采用这个可重复读的隔离级别能够使,事务B在一次事务中多次读取到data的值都是同一个,同时也可以防止脏读。但是可重复读也会出现幻读。幻读主要发生的原因是insert和delete的操作导致的。

        事务A读取表中满足条件的数据集结果有10条,事务B在表中新增(删除)一个数据,新增的数据也满足事务A的读取条件,此时事务A又去读结果有11条(9条)。

  • 串行化

        Serializable串行化操作,最严格的隔离级别,也就是让事务一个一个地执行,不能并发执行。这种事务隔离级别性能很低,因为同时只有一个事务执行,并发量较大时,会出现许多超时情况

    

总结:四种隔离级别会产生如下问题

        

© 著作权归作者所有

共有 人打赏支持
Garrey
粉丝 0
博文 7
码字总数 6500
作品 0
成都
私信 提问
浅谈数据库事物的四大特性(ACID)以及事物的隔离级别

事物的四大特性  如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因...

HenrySun
2016/08/20
107
0
数据库事务的四大特性以及事务的隔离级别

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。   如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)  原...

1071954237
2017/10/27
0
0
数据库事务的ACID及三种并发问题

数据库中事务的四大特性 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 1、 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,...

zjg23
2016/09/30
33
0
JDBC--处理事务与隔离级别

一、事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。 (1)事务的ACID(acid)属性 1. 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务...

大道无名
2016/07/02
38
0
事务四大特征:原子性,一致性,隔离性和持久性(ACID)

一、基本概念 事务的原子性(Atomicity) 事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据改操作要全部执行,要么全部不执行。这种特性称为原子性。 事务的原...

Idea
01/09
4
0

没有更多内容

加载失败,请刷新页面

加载更多

React和Redux的连接react-redux

通过Redux文档来了解react-redux,在一段时间的实践后准备翻一翻源代码,顺便做些相关的总结。我看的代码的npm版本为v4.0.0,也就是说使用的React版本是0.14.x。 react-redux提供两个关键模块...

前端攻城老湿
23分钟前
0
0
1、Mybatis连接池Context.xml配置

注意: (1)mybatis 3.2 之前 通过 set get 方法 获取相关属性。之后通过属性姓名获取相关关联。 (2)mybatis 映射 优先为 sql 语句中的别名与实体类的属性进行映射。 (3)jndi Java用于调...

KingFightingAn
39分钟前
0
0
Android 界面漩涡扭曲动效实现

背景:之前偶然看到优酷有类似的页面切换动画效果。于是自己也打算来实现下这样的效果。 动效说明:点击界面中的任意位置,界面以点击位置作为中心点,开始以漩涡状态,扭曲,收缩。直到消失...

Carlyle_Lee
49分钟前
2
0
聊聊我怎么系统学习Linux技能并快速提高的

聊聊我怎么系统学习Linux技能并快速提高的 随着电子信息科技时代的发展,学会使用计算机在我们的生活中成为了必不可少的一项技能。而作为计算机中的三大操作系统之一的Linux更是饱受计算机爱...

linuxCool
今天
4
0
Android/Java 获取一个byte[]的真实编码,用于解决乱码问题

来源地址:https://blog.csdn.net/qq_31384551/article/details/81627840 一个byte数组,byte[] buf,是由一个字符串转换来的,如何判断字符串使用的是什么编码? Mozilla的一个组件提供了相应...

她叫我小渝
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部