SQL Server事务的隔离级别

########## 数据库中数据的一致性 ##########

针对并发事务出现的数据不一致性,提出了4个级别的解决方法:

 隔离级别  第一类丢失更新  脏读 不可重复读  第二类丢失更新  虚读
 未提交读  未发生  发生  发生  发生  发生
 提交读  未发生  未发生  发生  发生  发生
 可重复读  未发生  未发生  未发生  未发生  发生
 串行化  未发生  未发生  未发生  未发生  未发生

1.未提交读

采用排它锁(update, insert, delete),解决了丢失更新问题,但是脏读仍然会出现。

例1:

begin tran

update t1 set t1.name = 'yyy'

waitfor delay '00:00:10' --等待10秒

rollback tran

例2:

set transaction isolation level read uncommitted

begin tran

select * from t1

commit tran

结果:例2返回更新后的值(yyy),尽管最后更新回滚了。

2.提交读

采用共享锁(select)+排它锁(update, insert, delete),解决了丢失更新问题,也解决了脏读问题。SQL Server默认属于这个隔离级别。

3.可重复读

采用修改锁(update)+排它锁(insert, delete)+共享锁(select),解决了丢失更新问题,脏读问题,但是会出现幻像读。

例3:

set transaction isolation level repeatable read

begin tran

select * from t1

waitfor delay '00:00:10'

select * from t1

commit tran

例4:

set transaction isolation level repeatable read

begin tran

delete from t1 where t1.id = 8

commit tran

结果:例3,2次返回的结果集都一样,都含有t1.id=8的行。

4.可串行读

采用一个事务执行完后,才能执行第2个事务(被阻塞)的串行方式,解决了以上所有的问题。

例5:

set transaction isolation level serializable

begin tran

select * from t1

waitfor delay '00:00:10'

commit tran

例6:

set transaction isolation level serializable

begin tran

delete from t1 where t1.id = 9

commit tran

结果:例5,2次都返回一样的结果,是删除前的。只能说明实现了可重复读级别的事务。

例7:

set transaction isolation level serializable

begin tran

select * from t1

waitfor delay '00:00:10'

select * from t1

commit tran

例8:

set transaction isolation level serializable

begin tran

insert into t1(name) values('zhang')

commit tran

结果:例7,2次都返回一样的结果,都是添加前的结果集。结合前面的例子说明是串行级别。

SQL Server事务的隔离级别的更多相关文章

  1. SQL Server事务的隔离级别和锁

    背景        当用户并发尝试访问同一数据的时,SQL Server尝试用锁来隔离不一致的数据和使用隔离级别查询数据时控制一致性(数据该如何读取),说起锁就会联想到事务,事务是一个工作单元,包括查 ...

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

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

  3. SQL Server 事务与隔离级别实例讲解

    上班途中,你在一处ATM机前停了下来.正当你在敲入密码的时候,你的一位家人也正在镇上的另一处TAM机上输入密码.你打算从某个还有500元余额的账户上转出400元,而你的家人想从同一账户取走300元.倘 ...

  4. SQL SERVER 2008 数据库隔离级别代码演示

    SQL SERVER 2008 数据库隔离级别代码演示   个隔离级别(其实这是SQL 工业标) 种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性 ...

  5. SQL Server 事务隔离级别详解

    标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一 ...

  6. SQL Server 事务隔离级别

    一.事务隔离级别控制着事务的如下表现: 读取数据时是否占用锁以及所请求的锁类型. 占用读取锁的时间. 引用其他事务修改的行的读操作是否: 在该行上的排他锁被释放之前阻塞其他事务. 检索在启动语句或事务 ...

  7. 【转】SQL Server 事务隔离级别详解

    SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用. 步骤 事务隔离级别通过影响读操作来间接地影响写操作:可以在回话级别上设置事务隔离级别也可 ...

  8. SQL Server 之 事务与隔离级别实例讲解

    SQL Server 之 事务与隔离级别实例讲解 SQL Server 实现了6个隔离级别来防止并发情况下,类似企图并发的访问或修改同一数据时问题的发生.本文将带你体验全部6个隔离级别.正如你接下来将 ...

  9. SQL Server中的事务与其隔离级别之脏读, 未提交读,不可重复读和幻读

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

随机推荐

  1. Android 中的异步下载

    网上提到最多的就是利用AsyncTask进行异步下载,用android-async-http第三方库的也比较多.这里写点注意事项. 先说说android-async-http,这个库发送请求利用thr ...

  2. web开发中目录路径问题的解决

    web开发当中,目录路径的书写是再常用不过了,一般情况下不会出什么问题,但是有些时候出现了问题却一直感到奇怪,所以这里记录一下,彻底解决web开发中路径的问题,开发分为前端和服务端,那么就从这两个方面 ...

  3. hdu 1879 继续畅通工程 解题报告

    题目链接:http://code.hdu.edu.cn/showproblem.php?pid=1879 这条题目我的做法与解决Constructing Roads的解法是相同的. 0 表示没有连通: ...

  4. mybatis前台传给带年月日时分秒的数据给后台,后台接收不到时分秒

    框架spring+springMVC+mybatis, 前台给后台传数据传不了时分秒,所以用springMVC的注解解决了,记录一下 controller中如下: /** * * 方法描述 : 使用@ ...

  5. Linux C 单链表 读取文件 并排序 实例并解释

    C的指针挺头疼的,先看一个例子: 给指针赋值和通过指针进行赋值这两种操作的差别确实让人费解.谨记区分的重要方法是:如果对左操作数进行解引用,则修改的是指针所指对象的值:    如果没有使用解引用操作, ...

  6. (转)Android中的Shape使用总结

    http://blog.csdn.net/bear_huangzhen/article/details/24488337 在Android程序开发中,我们经常会去用到Shape这个东西去定义各种各样的 ...

  7. Win7中打开chm文件内容无法显示问题

    今天下载了一个linux的2.6.22.14中文文档,下载后发现显示异常   www.2cto.com  怀疑是API的问题,连续从几个网站下来了很多版本,发现都存在这个问题,然后就开始自己的身上找原 ...

  8. OidView

    http://www.oidview.com/mibs/0/HOST-RESOURCES-V2-MIB.html

  9. WPF中的VisualTreeHelper

    VisualTreeHelper提供了一组WPF控件树模型,通过VisualTreeHelper可以遍历控件的树形结构,获取我们所需要的控件以及相应的属性: VisualTreeHelper提供了一下 ...

  10. Laravel框架数据库CURD操作、连贯操作

    这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 $users = DB::t ...