Sql Server隔离级别(1)
数据库是一个并发操作的环境,就像多线程一样,这样在高并发的情况下回出现一些问题。
假设我们有一张表Account,表结构和数据如下所示
| AccountName | Balance |
| jo | 100 |
| fo | 200 |
假设我们有两个事事务(T1,T2)
脏读:当一个事务允许读取另外一个事务修改但未提交的数据时,就可能发生脏读(dirty reads)。
(1)T1更新jo的余额:
UPDATE Account SET Balance=500 WHERE AccountName='jo'
(2)T2选出jo的余额:
SELECT Balance FROM Account WHERE AccountName='jo'
(3)T1回滚(rollback)。
此时在(2)中已经选出了500这个值,尽管最后T1的回滚让jo的余额保持100没有改变,这种情况就是脏读。
不可重复读:在一次事务中,当一行数据获取两遍得到不同的结果表示发生了"不可重复读(non-repeatable read)"。
(1)T2选出jo的余额:
SELECT Balance FROM Account WHERE AccountName='jo'
(2)T1中更新jo的余额并且提交(commit)。
UPDATE Account SET Balance=500 WHERE AccountName='jo'
Commit Tran
(3)T2再次选出jo的余额
SELECT Balance FROM Account WHERE AccountName='jo'
此时在(1)中选出的余额是100,在(3)中选出的余额是500,在同一个事务T2中两个Select得到了不一样的数据。
幻读:在事务执行过程中,当两个完全相同的查询语句执行得到不同的结果集。这种现象称为“幻读(phantom read)”
(1)T2选择金额大于100的账户余额
SELECT Balance FROM Account WHERE Balance>100
(2)T1插入新的余额大于100的账户
INSERT INTO Account (AccountName,Balance) VALUES ('ho',300)
(3)T2中再次选择金额大于100的账户
SELECT Balance FROM Account WHERE Balance>100
此时(1)读出了一条数据,(2)读出了两条数据,同一个查询的在同一个事务中的两次读取得到了不同的数量的结果集,这种现象就是幻读。
为了处理以上并发问题,有了并发控制的概念。简单来说就是一个事务在执行的时候,通过对正在访问的资源加锁来阻塞其他事务对资源的操作。
不同的加锁方式对应不同的隔离级别,用来针对不同的并发问题。
READ UNCOMMITTED
事务执行期间,对任何操作不加锁。意味着可以读取其他事务未提交的更新。这个隔离级别下以上的并发问题都有可能发生。
READ COMMITTED
事务执行期间,对写操作加锁。意味着当前将要写入的数据加了写锁,阻塞其他事务读取或者更改加锁数据,直到事务结束。
这个隔离级别可以防止其他的事务脏读,因为其他的事务对加锁数据的读写操作都被当前事务阻塞了。不过由于当前事务没有加读锁,所以当前事务会发生不可重复读。
REPEATABLE READ
事务执行期间,对读,写操作加锁。意味着当前事务写入和读取的数据其他的事务都无法访问,知道当前事务结束(回滚,或者提交),当前事务不会发生不可重复读,不过由于当前读取的数据范围没有加锁,其他的事务可以插入满足当前事务读取范围过滤条件的数据;或者更新当前事务读取范围外的数据,已使其满足当前事务的读取范围过滤条件。这样就会造成幻读。
SERIALIZABLE
可序列化或者叫可串行化,按照字面意思,是事务只能一个接着一个的执行。
实际的实现方式是通过加读锁,写锁和范围锁来保证事务执行的串行化。意味着在当前事务的执行过程中,会阻塞其他的涉及当前事务相关数据及数据范围的事务。
本文只是一个简单的介绍,要完全的理解隔离级别,并且推断出事务在不同隔离级别下会有什么样的不同就要深入的了解SQL Server在不同隔离级别下对不同对象的锁定,以及不同的锁之间是如何交互的,这些方面的问题推荐下面这篇博客:
http://www.cnblogs.com/RicCC/archive/2010/03/05/transaction-lock-isolation-level.html
Sql Server隔离级别(1)的更多相关文章
- Sql Server隔离级别(2)
Sql Server2005之后,引入了一个新的隔离级别Snapshot(Read Committed Snapshot Isolation (RCSI))和(Snapshot Isolation ( ...
- SQL Server 隔离级别(RC&RR)
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- SQL 事务隔离级别
转载来源:https://www.cnblogs.com/chenmh/p/3998614.html 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务 ...
- 【概念原理】四种SQL事务隔离级别和事务ACID特性
摘要: SQL事务隔离级别和事务的ACID特性 事务是一组读写操作,并且具有只有所有操作都成功才算成功的特性. 事务隔离级别 SQL事务隔离级别由弱到强分别是:READ_UNCOMMITTED.R ...
- (4.12)全面解析-SQL事务+隔离级别+阻塞+死锁
30分钟全面解析-SQL事务+隔离级别+阻塞+死锁 转自:https://blog.csdn.net/slowlifes/article/details/52752735 2016年10月07日 23 ...
- (分享别人的一篇好文章,来自jackson0714)30分钟全面解析-SQL事务+隔离级别+阻塞+死锁()
30分钟全面解析-SQL事务+隔离级别+阻塞+死锁 阅读目录 概述: 一.事务 二.锁 三.阻塞 四.隔离级别 五.死锁 以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQ ...
- 图解 sql 事务隔离级别
sql 事务隔离级别有四种分种为: 一 Read Uncpommitted(未提交读) 二 Read Committed(提交读) 三 Repeated Read(可重复读) 四 Serializab ...
- SQL事物隔离级别
标准SQL定义了4个隔离级别 Read uncommitted 未提交读 Read committed 已提交读 Repeatable read 可重复读 Serializable 可序列化 基本语法 ...
随机推荐
- [I2C]I2C总线协议图解
转自:http://blog.csdn.net/w89436838/article/details/38660631 1 I2C总线物理拓扑结构 I2C 总线在物理连接上非常简单,分别由S ...
- 设置maven默认的JDK版本
在pom文件中添加如下 : <build> <plugins> <plugin> <groupId>org.apache.maven.plugins&l ...
- Android开发资料学习(转载/链接)
http://www.devdiv.com/android_-forum-102-1.html 各种开源控件集合 http://www.cnblogs.com/android-blogs/p/5342 ...
- delphi 串口 关于RS485总线通信协议开发注意事项
http://blog.csdn.net/shjhuang/article/details/9426739 关于RS485总线通信协议开发注意事项 1 前言 近段时间发现我们系统在进行设备 ...
- 通过一道笔试题浅谈javascript中的promise对象
因为前几天做了一个promise对象捕获错误的面试题目,所以这几天又重温了一下promise对象.现在借这道题来分享下一些很基础的知识点. 下面是一个面试题目,三个promise对象捕获错误的例子,返 ...
- [杂] BOSE QC15维修小记
有一句话大概是这样说的“其他的耳机是靠嘴说的,BOSE是靠耳朵听的”,2010年就开始馋QC3,直到2012年在Vancouver的BOSE店里,在震耳欲聋的模拟噪音中带上QC15那一刻,下了决心. ...
- BIOS设置之UEFI/Legacy BIOS切换图文详解
近几年出现的电脑其中相当一部分都配置了UEFI BIOS,不过大多都默认以Legacy BIOS方式启动.而Win8正式上市后, 所有预装Win8(或Win8.1)的电脑都配置了UEFI BIOS并且 ...
- TFS 自动同步Server 端文件的批处理命令
TFS 自动同步Server 端文件的批处理命令 目前在我们组的工作中很多时候需要将TFS上Server端的代码自动无人值守的同步到本地中来, 找到了一些解决方案的资料http://bbs.scmro ...
- 如何安装NodeJS到阿里云Centos (64位版本V5-7)
如何安装NodeJS到阿里云Centos (64位版本V5-7) (Centos与Red Hat® Enterprise Linux® / RHEL, Fedora属于一类) 1) 安装v0.10版 ...
- hive内部表、外部表、分区表、视图
1.Table 内部表 1).与数据库中的Table在概念上是类似的 2).每一个Table在Hive中都有一个相应的目录存储数据 3).所有的Table数据(不包括 External Table) ...