举例分析:

我们有A表, 包含两条数据。
Read uncommitted:
假设我们有两个事务 Trans1, Trans2. 它们的操作如下:
Trans 1: 更新A1 -> A11, 然后更新A2 -> A22.
Trans 2: 读取A表中的第一条数据.
 
当trans1执行完第一步但还没开始第二部的时候,trans2开始读取A表中的第一条数据,这时trans2读到的值是A11. 但是这样带来的风险就是如果trans2在执行第二步的时候出错,那A11会回滚变成A1. 也就是说trans2 读到是trans1还没有提交事务的数据(脏数据)。

Read committed

在Read Committed Level下, 我们能避免 read uncommitted提到脏数据的问题。
还是两个事务 Trans 1, Trans 2. 它们的操作如下:
Trans 1: 更新A1 -> A11, 读取A2.
Trans 2: 读取A表中第一条数据。
 
当trans1执行完第一步更新A1->A11还没开始第二步的时候, trans2开始读取A表中的第一条数据, 这时trans2是读取不到数据的. 因为Trans1已经对A1施加了write锁,write锁是贯穿整个事务的。别的事务要想访问A1, 必须等到trans1执行完把锁释放掉才可以。那样trans2会等到trans1事务执行完读取到值A11。
 
但是在read committed模式下Read 锁是会在读完后马上释放掉的
Trans1: 读取A2,更新A2 -> A22。
Trans2: 更改A2->A22。
 
当trans1读完A2还没开始第二步的时候, trans2开始修改A2->A22. 因为在Read committed模式下, 读取锁会在读完后立马释放掉,所以trans2是可以修改A2的。
 
因为read committed模式下Read 锁是会在读完后马上释放掉,这样的话,我们就不能保证一个事务中两次相同的查询的结果是一样的,因为数据可能被另外一个事务给修改掉。
举例说明:
还是两个事务 Trans1, Trans2.
Trans1: 读取第一条数据, 读取第一条数据.
Trans2: 修改A表中第一条数据A1->A11。
 
当trans1执行完第一步但还没开始第二部的时候,  trans2事务会修改A1->A11. 那样trans1中第二部读到的数据就跟第一步不一样了,要想解决这个问题就要参照Repeatable read模式了

Repeatable reads

Repeatable reads模式很好的解决掉了Read committed多次读取数据不一致的问题,因为在这种level下, read 锁跟 write锁一样是要贯穿整个transaction, 而不是使用完就释放掉。 但是它不能解决新插入的数据,新插入的数据没有进行锁限制。 也就是所Repeatable read模式能保证在一个事务中多次相同查询读取的老数据内容是一样的但是数据条数不一定一样。 因为可能另外一个事务会在两次读取中间插入新的数据。
 

Serializable

Serializable是最严格的锁,它保证的一个事务中多次相同查询读取的数据是一样的,条数也是一样的。
 
注意: 锁越严格,性能就会越差,在真正的项目中,我们要根据我们的需求,选在合适的level. 找到平衡点。

事务Isolation Level 例子详解的更多相关文章

  1. Mysql 事务隔离级别(图文详解)

    本文由 SnailClimb 和 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事物的特性(ACID) 并发事务带来的问题 事务隔离级别 实际情况演示 脏读(读未提交) 避免脏 ...

  2. SQL Server 表的管理_关于事务的处理的详解(案例代码)

    SQL Server 表的管理_关于事务的处理的详解(案例代码) 一.SQL 事务 1.1SQL 事务 ●事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序 ...

  3. Lambda表达式详解(例子详解)(转自:http://blog.csdn.net/damon316/article/details/51734661)

    Lambda表达式详解(例子详解)     lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 ...

  4. MySQL事务及隔离级别详解

    MySQL事务及隔离级别详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的基本架构 MySQL的基本架构可以分为三块,即连接池,核心功能层,存储引擎层. 1> ...

  5. windows scala helloworld例子详解

    [学习笔记] windows scala helloworld例子详解: 在操作系统中,我们的Test3.scala会生成Test3.class,然后class文件被虚拟机加载并执行, 这一点和jav ...

  6. Spring声明式事务管理与配置详解

    转载:http://www.cnblogs.com/hellojava/archive/2012/11/21/2780694.html 1.Spring声明式事务配置的五种方式 前段时间对Spring ...

  7. mysql是如何实现事务隔离以及MVCC详解

    提到事务,你肯定会想到ACID(Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性),我们就来说说其中I,也就是"隔离性& ...

  8. SQL Server事务、隔离级别详解(二十九)

    前言 事务一直以来是我最薄弱的环节,也是我打算重新学习SQL Server的出发点,关于SQL Server中事务将分为几节来进行阐述,Always to review the basics. 事务简 ...

  9. SQL Server-聚焦事务、隔离级别详解(二十九)

    前言 事务一直以来是我最薄弱的环节,也是我打算重新学习SQL Server的出发点,关于SQL Server中事务将分为几节来进行阐述,Always to review the basics. 事务简 ...

随机推荐

  1. txt无法正常保存正文的解决办法

    最近遇到一个问题,txt文档中写了中文,则保存的时候 就会提示“该文件含有unicode格式字符,当文件保存为ANST编码文本文件时,该字符将会丢失”.虽然有解决办法,但不彻底,用起来总是很费劲,研究 ...

  2. 【Android】数据存储-SharedPreferences存储

    简单介绍:SharedPreferences是使用键值对的方式来存储数据的,也就是说,当保存一条数据的时候,给这条数据提供一个键,如果需要读取数据,只需要通过这个键就可以提取到对应的数据. 一:存储数 ...

  3. mac os 终端提示 you have new mail

    这里的信息可能是由于所做的什么操作触发了发邮件的事件, 系统发送的邮件提醒. 我遇到的原因是由于运行 cron , 由于权限所导致了发邮件的事件提醒. Last login: Tue Apr 26 0 ...

  4. like的性能问题

    使用like'%匹配的文字%',无法优化,因为索引起不到作用. 不过like'匹配的文字%',索引起作用.

  5. 两种隐藏元素方式【display: none】和【visibility: hidden】的区别及由此引出的问题

    此前看到一随笔(@任天缘 原文)讲了这个问题,并总结了: [display: none]:隐藏元素及元素内的所有内容,并且该元素的位置.宽高等其他属性值一并“消失”: [visibility: hid ...

  6. Android工程师必会做的20道题

    一.单选题     (共7道题,每题5分) 1.使用AIDL完成远程service方法调用下列说法不正确的是 A.aidl对应的接口名称不能与aidl文件名相同 B.aidl的文件的内容类似java代 ...

  7. Android Studio中常用插件及浅释

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园:追风917 插件可以来这个仓库查找:Android Studio Plugins 这里给出几个平时常用到的as插 ...

  8. vsftpd服务安装,配置,限制目录

    一.下载版本:vsftpd-2.0.5-16.el5_4.1.i386.rpm 二.安装:rpm -ivh vsftpd-2.0.5-16.el5_4.1.i386.rpm 三.配置: vsftpd. ...

  9. 初学时的shell

    学习期间写过一些shell脚本, 测试过程:vi test.sh 后把程序写入其中,保存退出.然后改变文件属性:chmod +x test.sh 最后执行:./test.shfor语句测试:1)#!/ ...

  10. tomcat的server.xml详解

    Tomcat服务器是由一系列可配置的组件构成,其核心组件是Catalina   Servlet容器,它是所有其他Tomcat组件的顶层容器.Tomcat的组件可以在<CATALINA_HOME& ...