SQL Server事务的隔离级别
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事务的隔离级别的更多相关文章
- SQL Server事务的隔离级别和锁
背景 当用户并发尝试访问同一数据的时,SQL Server尝试用锁来隔离不一致的数据和使用隔离级别查询数据时控制一致性(数据该如何读取),说起锁就会联想到事务,事务是一个工作单元,包括查 ...
- SQL Server事务、隔离级别详解(二十九)
前言 事务一直以来是我最薄弱的环节,也是我打算重新学习SQL Server的出发点,关于SQL Server中事务将分为几节来进行阐述,Always to review the basics. 事务简 ...
- SQL Server 事务与隔离级别实例讲解
上班途中,你在一处ATM机前停了下来.正当你在敲入密码的时候,你的一位家人也正在镇上的另一处TAM机上输入密码.你打算从某个还有500元余额的账户上转出400元,而你的家人想从同一账户取走300元.倘 ...
- SQL SERVER 2008 数据库隔离级别代码演示
SQL SERVER 2008 数据库隔离级别代码演示 个隔离级别(其实这是SQL 工业标) 种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性 ...
- SQL Server 事务隔离级别详解
标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一 ...
- SQL Server 事务隔离级别
一.事务隔离级别控制着事务的如下表现: 读取数据时是否占用锁以及所请求的锁类型. 占用读取锁的时间. 引用其他事务修改的行的读操作是否: 在该行上的排他锁被释放之前阻塞其他事务. 检索在启动语句或事务 ...
- 【转】SQL Server 事务隔离级别详解
SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用. 步骤 事务隔离级别通过影响读操作来间接地影响写操作:可以在回话级别上设置事务隔离级别也可 ...
- SQL Server 之 事务与隔离级别实例讲解
SQL Server 之 事务与隔离级别实例讲解 SQL Server 实现了6个隔离级别来防止并发情况下,类似企图并发的访问或修改同一数据时问题的发生.本文将带你体验全部6个隔离级别.正如你接下来将 ...
- SQL Server中的事务与其隔离级别之脏读, 未提交读,不可重复读和幻读
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...
随机推荐
- wsp反编译
最后出于好奇,我把wsp文件解压缩,看看里面是什么(如果您的机器上的压缩软件不能直接解压,可尝试修改后缀名为cab.).我看到的首先是一个清单文件(manifest.xml),一个DLL文件(Shar ...
- python在线文档
中文 http://python.usyiyi.cn/--------------------------不完整 http://www.pythondoc.com/pythontutorial27/i ...
- FragmentTabHost+ViewPager实现底部按钮
package com.example.fragmenttabdemo; import java.util.ArrayList; import java.util.List; import andro ...
- Hadoop入门经典:WordCount
转:http://blog.csdn.net/jediael_lu/article/details/38705371 以下程序在hadoop1.2.1上测试成功. 本例先将源代码呈现,然后详细说明执行 ...
- WW_TRANS_I18N_LOCALE”与“WW_TRANS_I18N_LOCALE”属性
Struts2 i18n国际化(允许用户自行选择语言)转最近在学习struts2,学习资料是李刚著的<struts2权威指南>,这本书写得非常好,非常有学习价值.我在学习过程中,自己跟着做 ...
- ubuntu 安装tigervnc
root@iZ25q0jd99eZ:~# apt-get install tigervnc Reading package lists... Done Building dependency tree ...
- vijos 1038 括号+路径 ***
链接:点我 就是自己写不出来 #include <cstdio> #include <climits> #include <memory.h> using name ...
- c语言 struct 的初始化
转自:http://www.cnblogs.com/silentjesse/archive/2013/07/30/3225212.html struct数据有3中初始化方法:顺序,C风格及C++风格的 ...
- GBK、GB2312、iso-8859-1之间的区别
转自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK.GB2312.iso-8859-1之间的区别 GB2312,由中华人民共和国政 ...
- 修改Tomcat编码方式的两种方法
转自:http://blog.sina.com.cn/s/blog_7c76d63901018lyt.html 方法一:推荐,不会影响到其它项目 见我的另一篇博客:http://www.cnblog ...