文档章节

数据库事务的隔离级别

Garrey
 Garrey
发布于 2017/08/08 13:47
字数 1007
阅读 19
收藏 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
码字总数 6562
作品 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
Spring事务的理解

事务的基本原理: Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: 获取连接...

风格若干
2016/08/17
51
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
1
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部