- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【嘉为教育】MySql事务隔离级别详解分析
【嘉为教育】MySql事务隔离级别详解【前言】SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。Read Uncommitted(读取未提交内容)?????? 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。Read Committed(读取提交内容)?????? 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。Repeatable Read(可重读)?????? 这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。Serializable(可串行化)??????? 这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。????????这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如:????????脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。????????不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。????????幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。????????在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:下面,将利用MySQL的客户端程序,分别测试几种隔离级别。测试数据库为test,表为tx;表结构:id????????????????????????????? intnum????????????????????????????? int两个命令行客户端分别为A,B;不断改变A的隔离级别,在B端修改数据。(一)、将A的隔离级别设置为read uncommitted(未提交读)?在B未更新数据之前:客户端A:B更新数据:客户端B:客户端A:??????? 经过上面的实验可以得出结论,事务B更新了一条记录,但是没有提交,此时事务A可以查询出未提交记录。造成脏读现象。未提交读是最低的隔离级别。(二)、将客户端A的事务隔离级别设置为read committed(已提交读)?在B未更新数据之前:客户端A:B更新数据:客户端B:客户端A:?????? 经过上面的实验可以得出结论,已提交读隔离级别解决了脏读的问题,但是出现了不可重复读的问题,即事务A在两次查询的数据不一致,因为在两次查询之间事务B更新了一条数据。已提交读只允许读取已提交的记录,但不要求可重复读。(三)、将A的隔离级别设置为repeatable read(可重复读)?在B未更新数据之前:客户端A:B更新数据:客户端B:客户端A:B插入数据:客户端B:客户端A:?????? 由以上的实验可以得出结论,可重复读隔离级别只允许读取已提交记录,而且在一个事务两次读取一个记录期间,其他事务部的更新该记录。但该事务不要求与其他事务可串行化。例如,当一个事务可以找到由一个已提交事务更新的记录,但是可能产生幻读问题(注意是可能,因为数据库对隔离级别的实现有所差别)。像以上的实验,就没有出现数据幻读的问题。(四)、将A的隔离级别设置为?可串行化?(Serializable)A端打开事务,B端插入一条记录事务A端:事务B端:因为此时事务A的隔离级别设置为serializable,开始事务后,并没有提交,所以事务B只能等待。事务A提交事务:
您可能关注的文档
- 【名师A计划】(全国通用)2017高考数学一轮复习第八章解析几何第六节双曲线习题理分析.doc
- 【名师A计划】(全国通用)2017高考地理一轮总复习第三章地球上的水第二节大规模的海水运动课件分析.ppt
- 【创新设计】2017年高考地理一轮复习第三章自然地理环境中的物质运动和能量交换专题一气候课件中图版分析.ppt
- 【名师A计划】(全国通用)2017高考地理一轮总复习第八章农业地域的形成与发展第一节课件分析.ppt
- 23、《信任》讲课精要.pptx
- 【南方新课堂】2016年高考数学总复习第八章立体几何第1讲空间几何体的三视图和直观图课件理分析.ppt
- 【名师A计划】(全国通用)2017高考数学一轮复习第八章解析几何第六节双曲线课件理分析.ppt
- 240烧结方案说明书精要.doc
- 23美丽的小兴安岭(改)精要.pptx
- 2017物质用提汇编——北京精要.doc
- 2.2.1.2-B1-急诊急救事件应急演练方案(精选11篇).docx
- 关于集中开展安全生产“风险管控隐患排查治理月”活动的通知.docx
- 医院住院病历质量监控管理规定(3篇).docx
- 医院住院病历质量监控管理规定(最新).docx
- 医院住院病历质量监控管理规定【推荐】.docx
- 八下12《诗经》二首《关雎》 教学课件.pptx
- 第二单元整本书阅读《红星照耀中国》课件 统编版语文八年级上册.pptx
- 2025年陕西省延安市单招(语文)测试模拟题库1套.docx
- 2025年陕西省咸阳市选调生考试(公共基础知识)综合能力测试题1套.docx
- 2025年青岛工程职业学院单招(语文)测试题库及参考答案一套.docx
文档评论(0)