Oracle和sqlserver关于锁和隔离级别的差异
事务属性:ACID(原子性、一致性、隔离性、持久性)
隔离级别:主要针对的是共享锁的持有时间和范围
SQL标准定义了以下四种事务隔离级别
READ UNCOMMITTED 允许脏读、 不可重复读、 允许幻读
READ COMMITTED 不允许脏读、 不可重复读、 允许幻读
REPEATABLE READ 不允许脏读、 可重复读、 允许幻读
SERIALIZABLE 不允许脏读、 可重复读、 不允许幻读
SQL标准所定义的默认事务隔离级别是SERIALIZABLE,但是sqlserver 和 Oracle 默认使用的都是READ COMMITTED
Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。Oracle从设计上就不支持脏读,但缺省是使用行版本控制的。
Sqlserver四种隔离级别都支持,2005及更高版本支持行版本快照,但缺省没有开启。
行版本快照(SNAPSHOT):当读取数据时,可以读取的行是事务开始时可用的最后提交版本。不过这种隔离级别使用的不是共享锁,而是行版本控制。
设置隔离级别使用 SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]
另外,测试验证问题时,我们常使用的阻塞命令如下:

select * from tkk with(nolock);
select * from tkk with(holdlock);
select * from tkk with(updlock);
select * from tkk with(paglock);
select * from tkk with(tablock) where 1=0;
select * from tkk with(tablockx) where 1=0; --NOLOCK(不加锁)
--此选项被选中时,SQL Server 在读取或修改数据时不加任何锁。 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“脏数据”。
--HOLDLOCK(保持锁)
--此选项被选中时,SQL Server 会将此共享锁保持至整个事务结束,而不会在途中释放。
--UPDLOCK(修改锁)
--此选项被选中时,SQL Server 在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能修改数据。
--PAGLOCK(页锁)
--此选项为默认选项, 当被选中时,SQL Server 使用共享页锁。
--TABLOCK(表锁)
--此选项被选中时,SQL Server 将在整个表上置共享锁直至该命令结束。 这个选项保证其他进程只能读取而不能修改数据。
--TABLOCKX(排它表锁)
--此选项被选中时,SQL Server 将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据。
Oracle和sqlserver关于锁和隔离级别的差异的更多相关文章
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
- 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗
ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性: Oracle.MYSQL与DB2可在所有主流平台上运行: SQL Server只能在Windows下运行: --安 ...
- Oracle事务之一:锁和隔离
Oracle事务之一:锁和隔离 一. 事务概述 事务管理是数据库处理的核心.数据库既要保证用户能并发地执行事务,还要保证数据库的一致性. 当第一条可执行的SQL开始执行,就隐形地开始了一个事务,直到遇 ...
- Oracle、SqlServer——临时表
一.oracle 1.概述: oracle数据库的临时表的特点: 临时表默认保存在TEMP中: 表结构一直存在,直到删除:即创建一次,永久使用: 不支持主外键. 可以索引临时表和在临时表基础上建立视图 ...
- MySQL、Oracle、SqlServer的区别
鉴于和数据库打交道日益频繁,遂决定写一篇关于Oracle.SqlServer.MySQL区别的个人观点. MySQL是大学时的主要学习对象,但刚参加工作时转到了SqlServer,现在主要接触的是Or ...
- oracle与sqlserver部分区别
oracle和sqlserver的区别:1,执行修改操作要接commit,不然数据仅仅只是查看,并不是提交数据2,oracle不能使用select 字段 这种查看方式查看数据:3,oracle存储过程 ...
- ORACLE连接SQLSERVER
一.实验(实验成功) 1.实验目标:ORACLE连接SQLSERVER以及查询数据 2.搭建的环境: oracle 9i 9.0.2.0.1 地址:192.168.40.139 sql2000 的数据 ...
- 采用Hibernate框架的研发平台如何能够真正兼容Oracle和sqlServer数据库
都说Hibernate框架的使用可以很容易的让你的研发平台支持多种不同类型的数据库,但实践表明,这里的“容易”,是相对的. 想让研发平台支持多种数据库,并不是一件简单的事,也可以这么说:并不是只要使用 ...
- Java学习-006-三种数据库连接 MySQL、Oracle、sqlserver
此文主要讲述在初学 Java 时,常用的三种数据库 MySQL.Oracle.sqlserver 连接的源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源 ...
随机推荐
- 基础知识复习(一)——C语言位运算符详解
常用的位运算符:与(&),取反(~),或(|),异或(^),左移(«),右移(») 1. 与(&)操作符,按位与,全为1 时,结果取1 11001 &10011 结果:1000 ...
- SPSS数据分析—描述性统计分析
描述性统计分析是针对数据本身而言,用统计学指标描述其特征的分析方法,这种描述看似简单,实际上却是很多高级分析的基础工作,很多高级分析方法对于数据都有一定的假设和适用条件,这些都可以通过描述性统计分析加 ...
- google应用商店的解决
{ "enabled_plugins": [ "SimpleReloadPlugin", "SimpleRefresh" ] } git c ...
- mongostat 3.2指标详解
存储引擎:wiredTiger /usr/local/mongodb-3.2.8/bin/mongostat -uroot -pcEqHuoqiJYhjVpuL --host 127.0.0.1 ...
- nginx 负载均衡、用数据库存储Session,来实现多站点共享Session[转]
多站点共享Session常见的作法有: 1.使用.net自动的状态服务(Asp.net State Service); 2.使用.net的Session数据库: 3.使用Memcached. 4.使用 ...
- JavaWeb chapter 4 Servlet处理HTTP请求
1. GET/POST提交方法: 用户在网页上点击一个超链接:(get) 用户提交在网页上提交表单:(post或者get) 用户在浏览器地址栏输入URL地址并回车(get) 2. 默认情况下都是使 ...
- Linux定时器相关源码分析
Linux的定时器使用时间轮算法.数据结构不难理解,核心数据结构与散列表及其相似,甚至可以说,就是散列表.事实上,理解其散列表的本质,有助于对相关操作的理解. 数据结构 这里先列出一些宏,稍后解释: ...
- linux下各种软件的安装过程
//////知识储备//////////////////////////////////////////////////////////////////// /var 下存放着服务和经常改变的文件 / ...
- Python显示函数调用堆栈
网上找到如下几个思路: 1.用inspect模块 2.用sys._getframe模块 3.用sys.exc_traceback,先抛一个异常,然后抓出traceback #!/usr/bin/env ...
- 【RobotFramework自动化测试】RFS常用脚本
读取后台数据文件:Import Variables | ${CURDIR}/\ABC.py 定位页面:Wait Until Keyword Succeeds | 5s | 500ms | select ...