举例分析:

我们有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. AndroidStudio怎么将开源项目发布到jcenter

    前言 自己在网上搜了一大堆,大体就两种方法,而我选择的是其中代码少的的方法,不过他们或多或少留下了少许的坑,(按他们的方法我是上传成功,但不能发布到jCenter上去,也可能是我自己的问题o(≧v≦) ...

  2. enable cors in spring mvc with swagger

    a. In controller add @CrossOrigin(origins = "http://localhost:8080") b. In mvc-servlet.xml ...

  3. 使用微信js接口的方法 ,以调用相机为例

    protected string GetTimeStamp_Str=""; protected string nonceStr_Str = ""; protec ...

  4. 【原创教程】鲸吞HTML

    首先,我们的angularJS课程分为三大模块: HTML/CSS/JS基础. angularJS详解. angualrJS的一些实用框架讲解. 其中,第一大模块的对象是对前端开发技术有点了解但不熟悉 ...

  5. gulp 前端自动化工具

    一开篇 在前端开发的过程中,我们经常会碰到压缩.合并.图片script 等,于是就有了gulp 前端自动化构建工具,它能帮你在前端开发中,节省时间. 1,安装 node.js 因为gulp 构建工具是 ...

  6. Java-Android 之页面的跳转和结构的搭建

    Android中每个页面就是一个Activity,要合理的让这些页面实现跳转,才是关键,这里讲一个最简单的 首先,有一个主页面main.xml <?xml version="1.0&q ...

  7. mvc 用户控件 ascx 获取 View 页面的值

    <%Html.RenderAction("AscxSideNav", "UI", new {itemName=ViewData["ItemNam ...

  8. JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别

    JAVAAPI学习之Calendar类 http://blog.csdn.net/myjlvzlp/article/details/8065775(写的很好,清晰易懂) Calendar类set(). ...

  9. IOS-UIScrollView实现图片分页

    1.设置可以分页 _scrollView.pagingEnabled = YES; 2.添加PageControl UIPageControl *pageControl = [[UIPageContr ...

  10. Quartz-2D绘图之路径(Paths)详解

    在上篇文章中,我们简单的理解了绘图上下文,今天我们来认识一下Quartz-2D中另一个重要的概念,路径(Paths). 一.理解路径 路径定义了一个或多个形状,或是子路径.一个子路径可由直线,曲线,或 ...