SQLServer 事务隔离级别与锁的申请和释放
脏读:当一个事务开始更新数据,但是这个事务并没有完全提交,这个时候第二个事务开始读取数据,把第一个事务所更改的数据读了出来,
第二个事务读取的数据时临时的,因为有可能第一个事务最终有可能做回滚操作
不可重复读:在一个事务中多次读取某一行数据,可能会得到不同的结果
幻读:在一个事务中,我们读取数据,发现没有特定的行,第一个事务还没结束,这个时候第二个事务插入了该行数据,
然后在第一个事务再次读取时,该行数据突然出现了
SQLServer数据库支持一下隔离级别:未提交读、已提交读、可重复读、快照、可序列化。
- 未提交读(可以读取已由其他事务修改但未提交的行)
- 不会发出共享来防止其他事务修改当前事务读取的数据
- 也不会被排它锁阻塞
- 已提交读(指定语句不能读取已由其他事务修改但未提交的数据,所以可以避免脏读)
- 其他事务可以在当前事务的各个语句间更新数据,从而产生不可重复读和幻读
- 数据库会在读的时候使用共享锁来防止其他事务在当前事务执行读取操作期间修改行,共享锁还会阻止语句在其他事务完成之前读取由这些事务修改的行,
- 语句运行完后释放共享锁,而不是等到事务提交的时候
- 可重复读(在一个事务中多次读取某一行数据,可能会得到相同的结果)
- 对事务中的每个语句所读取的全部数据都设置了共享锁,并且共享锁一直保持到事务完成为止
- 快照
- 在任何一个修改之前,先对修改前的版本做一个复制,后续的一切读操作都会去读这个复制的版本,修改将创建一个新的版本,这种处理方式可以保证读写不会相互阻塞
- 可序列化
- 可序列化的要求是除了可重复读以外,还要求当前事务完成前,其他事务不能使用当前事务中任何语句的读取键值进行插入和删除操作。SQLServer通过加范围锁的方式来实现可序列化
| 隔离级别 | 是否申请共享锁 | 何时释放 | 有无范围锁 |
| 未提交读 | 不申请 | -- | 无 |
| 已提交读 | 申请 | 当前语句执行完 | 无 |
| 可重复读 | 申请 | 事务提交时 | 无 |
| 可序列化 | 申请 | 事务提交时 | 有 |
不同隔离级别的并发副作用:
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
| 未提交读 | 是 | 是 | 是 |
| 已提交读 | 否 | 是 | 是 |
| 可重复读 | 否 | 否 | 是 |
| 快照 | 否 | 否 | 否 |
| 可序列化 | 否 | 否 | 否 |
SQLServer 事务隔离级别与锁的申请和释放的更多相关文章
- MySQL数据库引擎、事务隔离级别、锁
MySQL数据库引擎.事务隔离级别.锁 数据库引擎InnoDB和MyISAM有什么区别 大体区别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能 ...
- 重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系
重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系 Innodb中的事务隔离级别和锁的关系 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁 ...
- Innodb中的事务隔离级别和锁的关系(转载)
nodb中的事务隔离级别和锁的关系 原文:https://tech.meituan.com/innodb-lock.html ameng ·2014-08-20 15:50 前言: 我们都知道事务的几 ...
- 【转载】Innodb中的事务隔离级别和锁的关系
前言 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力.所 ...
- MySQL事务隔离级别,锁(转)
add by zhj: 本文针对的是MySQL的InnoDB存储引擎,不适用于MySQL的其它存储引擎和其它数据库 原文:MySQL数据库事务隔离级别(Transaction Isolation Le ...
- autocommit 隔离级别 next lock gap lock 事务隔离级别和锁
autocommit 隔离级别 https://www.ibm.com/developerworks/cn/opensource/os-mysql-transaction-isolation-leve ...
- MySql各事务隔离级别及锁问题
聊事务隔离级别和锁问题之前首先得理解事务的隔离级别和共享锁及独占锁的概念: 事务的隔离级别: 脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × ...
- SqlServer中的事务隔离级别、锁机制
事务 作用:用来执行一连串的动作,并且保证所有动作要么都执行.要么都不执行. 属性:原子行.一致性.隔离性.持久性 锁 作用:SqlServer使用锁来实施事务隔离属性. 阻塞 定义:如果一个事务持有 ...
- Innodb中的事务隔离级别和锁的关系
前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力. ...
随机推荐
- SqlMetal生成的DBML文件信息
[Database(Name="AdventureWorks")] --> 映射数据库 [Table(Name="Customers")] --> ...
- Python-09-线程、进程、协程、异步IO
0. 什么是线程(thread)? 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆 ...
- EF批量添加数据性能慢的问题的解决方案
//EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.Db ...
- C/C++实践笔记 006
字符与字符串字符按照%d,打印ASCCII字符按%c,打印字符本身‘0’ 0 ‘\0’区别: char ch3=0; 等号会自动转换,转换成ASCCII值所对应的字符.即null或\0C字符串不可以直 ...
- 【跟着子迟品 underscore】Array Functions 相关源码拾遗 & 小结
Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...
- @Autowired的使用
1.benas的xml文件中需要加入如下代码 <bean class="org.springframework.beans.factory.annotation.AutowiredAn ...
- iOS地图 -- 地理编码和反地理编码
地理编码和反地理编码 用到的类和方法 CLGeocoder --> 地理编码管理器 - (void)geocodeAddressString:(NSString *)addressString ...
- vim2
一.光标控制命令 命令 移动 k 向上移一行 j 向下移一行 h ...
- Ubuntu16.04编译Android6.0/cm13.0教程及相关错误解决办法
一.必备工作 1.安装依赖库 sudo apt--dev libesd0-dev git-core gnupg flex bison gperf build-essential zip curl zl ...
- 彻底理解js中this的指向,不必硬背。
首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...