举例分析:

我们有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. 用php切割大图片为成规则的小图

    将根据xml配置,将合并后的大图切割成一系列小图 <?php /** * 将大图片按照配置切割成一定比例的小图片 * 并按照一定规则给小图片命名 * * 使用方法: *根据guardians/g ...

  2. Effective C++ 笔记三 资源管理

    条款13:以对象管理资源 许多资源被动态分配于heap内而后被用于单一区块或函数内.它们应该在控制流离开那个区块或函数时被释放.标准程序库提供的auto_ptr正是针对这种形式而设计的特制产品.aut ...

  3. 11.10 noip模拟试题

    1.第K小数 (number.cpp/c/pas) [问题描述] 有两个正整数数列,元素个数分别为N和M.从两个数列中分别任取一个数 相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少 ...

  4. gitlab 配置 ssh && ubuntu

    1,在你的电脑上生成密钥ssh-keygen -t rsa -C "youeamil@explode.com" 2,在 ubuntu系统中 ~/.ssh目录中生成了两个文件id_r ...

  5. C#中Hashtable、Dictionary详解以及写入和读取对比

    转载:http://www.cnblogs.com/chengxingliang/archive/2013/04/15/3020428.html 在本文中将从基础角度讲解HashTable.Dicti ...

  6. WIN7 VMware Ubuntu虚拟机连接secureCRT及ftp传输文件

    一.安装vmware没有问题,网络设置以NAT方式(VMnet8是vmware专属的虚拟网卡).安装完毕后设置虚拟机的 VirtualNetworkEditor(可以再开始->所有程序VMwar ...

  7. 网页快照 - C#实现

    /// <summary> /// 图片类型枚举 /// </summary> public enum ImageType { GIF = , JPG = , PNG = } ...

  8. Ubuntu系列Crontab日记记录

    修改rsyslog文件,将/etc/rsyslog.d/50-default.conf 文件中的#cron.*前的#删掉 重启rsyslog服务service rsyslog restart 重启cr ...

  9. HDU 题目分类

    转载自新浪博客,, http://blog.sina.com.cn/s/blog_71ded6bf0100tuya.html 基础题: 1000.1001.1004.1005.1008.1012.10 ...

  10. canvas之----浮动小球

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...