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中的事务隔离级别和锁的关系
前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力. ...
随机推荐
- Remove Duplicates from Sorted List II
Remove Duplicates from Sorted List II Given a sorted linked list, delete all nodes that have duplica ...
- 让 http 2来得更猛烈些吧
今早在公交车上,把http2的官方讲解文档(还在草案之中)看了一圈,发现相对http 1.1确实改进了不少,完整的文档可通过:://www.gitbook.com/book/ye11ow/http2- ...
- Elasticssearch学习教程
http://www.cnblogs.com/eggTwo/p/4425269.html
- win7/8 访问 访问局域网 默认加载域 而无法成功访问的问题
运行 gpedit.msc选择 本地计算机策略- 计算机配置-windows设置-安全设置-本地策略-安全选项 其中有个 网络安全:lan管理员身份验证级别 选择 发送LM和NTLM响应
- 基于FPGA的飞机的小游戏
基于FPGA的飞机的小游戏 实验原理 该实验主要分为4个模块,采用至上而下的设计方法进行设计.由50M的晶振电路提供时钟源,VGA显示控制模块.图形显示控制模块.移动模块的时钟为25M,由时钟分频电路 ...
- 【jQuery示例】遍历表单数据并显示
<!DOCTYPE html> <html> <head> <style> body, select { font-size:14px; } form ...
- linux命令总结
vmstat: linux监控命令,可以展现服务器状态值. 一般vmstat工具的使用是通过两个数字参数来完成的,第一个是采样的时间间隔,单位是秒,第二参数是采样的次数 例:vmstat 3 2 ( ...
- redis 学习 01(下载 学习资源)
1. windows 版 redis 下载地址 https://github.com/MSOpenTech/redis/releases 2. redis 实战源码 http://redisinact ...
- Beta阶段第二次Scrum Meeting
此文章已于 2:51:42 2016/12/8 重新发布到 buaa_overwatch Beta阶段第二次Scrum Meeting 情况简述 BETA阶段第二次Scrum Meeting 敏捷开发 ...
- maven的eclise配置
http://blog.csdn.net/guanning0109/article/details/26069277