文档章节

数据库事务的隔离级别

Garrey
 Garrey
发布于 2017/08/08 13:47
字数 1007
阅读 14
收藏 0
点赞 0
评论 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 ⋅ 0

数据库事务的ACID及三种并发问题

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

zjg23 ⋅ 2016/09/30 ⋅ 0

数据库的并发控制

并发控制机制试图在多个事务中交叉(同时)执行Read和Write操作,并使得交叉执行的结果与串行调度执行的结果一样。这个交叉执行给人的感觉是事务在并行执行。并发控制非常重要,因为事务在共...

柳哥 ⋅ 2014/06/29 ⋅ 0

事务四大特征:原子性,一致性,隔离性和持久性(ACID)

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

Idea ⋅ 01/09 ⋅ 0

JDBC--处理事务与隔离级别

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

大道无名 ⋅ 2016/07/02 ⋅ 0

事务隔离级别和脏读的快速入门(转载)

关键要点 仅从ACID或非ACID角度考虑问题是不够的,你应知道你的数据库支持何种事务隔离级别。一些数据库宣称自己具有“最终一致性”,但却可能对重复查询返回不一致的结果。相比于你所寻求的...

treenewtreenew ⋅ 2016/11/16 ⋅ 0

事务隔离级别新看法!

前言 我前段时间在写代码的时候,经常考虑并发问题,对事物的安全性、隔离级别需要更深的了解,所以翻看了网上绝大部分关于事务的文章。但是看了之后还是有些疑惑,例如事务的四种隔离级别,...

Awisper ⋅ 2016/01/10 ⋅ 0

脏读、幻读、不可重复读和丢失更新

1.脏读 -- 一个事务读取到另外一个事务没有提交的数据 事务T1:更新一条数据 -->事务T2:读取事务T1更新的记录 事务T1:调用commit进行提交 此时事务T2读取到的数据是保存在数据库内存中的数...

拐美人 ⋅ 06/11 ⋅ 0

事务隔离级别(isolation level)

概述 隔离属性是原子性、一致性、隔离性和持久性 (ACID) 这四个属性之一,逻辑工作单元必须具备这四个属性才能称为事务。 隔离级别定义了事务与事务之间的隔离程度。 隔离级别与并发性是互为...

coda ⋅ 2013/11/19 ⋅ 0

数据库事务

事务的四个特性 (ACID) ,分别是原子性( Atomicity), 一致性( Consistency), 隔离性( Isolation), 持久性( Durability)。一致性是事务的目的,原子性,隔离性,持久性是一致性的必要条件...

netpeak ⋅ 2017/06/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android JNI 读写Bitmap的方法

Java层创建Bitmap,通过JNI将Bitmap传到C/C++进行处理 Java部分 public static native boolean greenBitmap(Bitmap bitmap); C/C++部分 JNIEXPORT jboolean JNICALL Java_com_test_Test_gree......

国仔饼 ⋅ 10分钟前 ⋅ 0

一次性让你懂async/await,解决回调地狱

什么是async? 欢迎留言讨论 async 函数是 Generator 函数的语法糖。使用 关键字 async 来表示,在函数内部使用 await 来表示异步。相较于 Generator,async 函数的改进在于下面四点: 内置执...

阿K1225 ⋅ 10分钟前 ⋅ 0

angular常用命令

.下载更新操作 1.利用npm下载angular的命令行工具AngularCLI: npm install -g @angular/cli 2.下载jquery: npm install --save jquery 3.更新npm: npm i -g npm 4.更新angular: ng update ......

消散了的诗意 ⋅ 13分钟前 ⋅ 0

window.print 页面打印

定义和用法 print() 方法用于打印当前窗口的内容。 语法 window.print(); window.print() 实际上,是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型...

初学者的优化 ⋅ 14分钟前 ⋅ 0

魔兽世界 7.0版本上 PVE装备全攻略

  T套 因为大家应该都会打穿副本的所以具体是哪个boss我就不说了。   T1: 所有套装都在【熔火之心】出   T2: 头原来是在【奥妮克希亚的巢穴】改到黑翼之巢的奈法利安了,腿是在【熔火之...

wangchen1999 ⋅ 14分钟前 ⋅ 0

java.math.BigDecimal使用小结

原文地址 java.math.BigDecimal使用小结 divide方法 使用BigDecimal.divide方法时一定要考虑: 除数是否为0 商是否是无限小数 正确的使用方式 判断除数是否为0,是0做另外的处理逻辑 调用除法...

666B ⋅ 17分钟前 ⋅ 0

关于qstring转char乱码问题。

if (OpenClipboard(NULL)) { HGLOBAL hgClip; EmptyClipboard(); QByteArray byay = FValue.toLocal8Bit(); //转latin编码 char *bochsrc_line = byay.data(); hgClip = GlobalAlloc(GMEM_DD......

backtrackx ⋅ 17分钟前 ⋅ 0

了解SSH加密和连接过程

介绍 SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,对彼此进行身份验证,以及来回传递命令和...

吴伟祥 ⋅ 23分钟前 ⋅ 0

微信小程序

小程序的基础配置:导航栏和tabbar 在app.json文件中配置导航栏和tabrbar 导航栏的设置 设置导航,背景黑色,文字白色,文字内容 { "pages":[ "pages/index/index", "pages/logs/l...

上官清偌 ⋅ 27分钟前 ⋅ 0

【转】百度坐标坐标系之间的转换(JS版代码)

/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 *///定义一些常量var x_PI = 3.1415926535897932...

HAVENT ⋅ 28分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部