SQL Server中五个事务隔离有什么区别

园子里有很不错的介绍SQL Server事务隔离的文章,感觉很多都从概念入手介绍的,对那些初学者来说,看得见摸得 着的理解才深刻,故不再重复,重点在于实例演示上面。

首先解释下事务隔离是干什么的,一个事务的隔离级别控制了它怎么样影响其它事务和被其它事务所影响。

1.READ UNCOMMITTED,会导致脏读(能读取其它事务没有提交的更改)和不可重复读(事务读取的数据被其它事务 所修改,再次读取时不一致)

初始化:

CREATE TABLE TranLevel (k int IDENTITY(1,1), val int)

INSERT INTO TranLevel(val) values(1)

INSERT INTO TranLevel(val) values(2)

INSERT INTO TranLevel(val) values(3)

首先执行Query1,再新建查询立即执行Query2

Query1:

BEGIN TRAN Query1

-- 在事务中修改

UPDATE TranLevel SET val = 9

--  '等待10秒,期间事务2运行'

WAITFOR DELAY '00:00:10'

-- 不提交修改,回滚事务

ROLLBACK TRAN Query1

Query2:

-- 设置当前会话事务隔离级别为未提交读

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

BEGIN TRAN Query2

SELECT '事务2开始并发执行,读取到了事务1修改了但没有提交的数据,是脏读'

SELECT * FROM Tranlevel

SELECT '事务2等待10秒,让事务1执行完'

WAITFOR DELAY '00:00:10'

SELECT '两次读取的结果不一致,是不可重复读'

SELECT * FROM TranLevel

COMMIT TRAN Query2

下面就看看Query2执行的结果是怎样的:

结果显而易见,如果将事务隔离级别设置为未提交读,则会造成脏读和不可重复读的问题,在这几个事务隔离级别中 是限制最小的一个,SQL Server分配的资源也最小。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索重复
, select
, 事务
, 结果
, 隔离
, 不可重复读
级别
sql事务隔离级别、sql 设置事务隔离级别、sqlserver隔离级别、sql server 快照隔离、sql server 隔离级别,以便于您获取更多的相关知识。

时间: 2024-12-30 11:19:09

SQL Server中五个事务隔离有什么区别的相关文章

SQL SERVER中强制类型转换cast和convert的区别详解_MsSql

SQL SERVER中强制类型转换cast和convert的区别 在SQL SERVER中,cast和convert函数都可用于类型转换,其功能是相同的, 只是语法不同. cast一般更容易使用,convert的优点是可以格式化日期和数值. select CAST('123' as int) -- 123 select CONVERT(int, '123') -- 123 select CAST(123.4 as int) -- 123 select CONVERT(int, 123.4) --

sql server中Select count(*)和Count(1)的区别和执行方式

    在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数.很多人其实对这三者之间是区分不清的.本文会阐述这三者的作用,关系以及背后的原理.     往常我经常会看到一些所谓的优化建议不使用Count(* )而是使用Count(1),从而可以提升性能,给出的理由是Count( *)会带来全表扫描.而实际上如何写Count并没有区别.     Count(1)和Count(*)实际上的意思是,评估Count()中的表达式是否为NULL,如果为

sql server中Select count(*)和Count(1)的区别和执行方式_MsSql

    在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数.很多人其实对这三者之间是区分不清的.本文会阐述这三者的作用,关系以及背后的原理.     往常我经常会看到一些所谓的优化建议不使用Count(* )而是使用Count(1),从而可以提升性能,给出的理由是Count( *)会带来全表扫描.而实际上如何写Count并没有区别.     Count(1)和Count(*)实际上的意思是,评估Count()中的表达式是否为NULL,如果为

SQL SERVER中强制类型转换cast和convert的区别

在SQL SERVER中,cast和convert函数都可用于类型转换,其功能是相同的, 只是语法不同. cast一般更容易使用,convert的优点是可以格式化日期和数值. 代码 select CAST('123' as int)   -- 123select CONVERT(int, '123')  -- 123 select CAST(123.4 as int)   -- 123select CONVERT(int, 123.4)  -- 123  select CAST('123.4' 

SQL Server中临时表与表变量有什么区别

我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量.在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQLServer的系统日志,虽它们在Tempdb中体现,是分配

基于SQL Server中char,nchar,varchar,nvarchar的使用区别_MsSql

对于程序中的一般字符串类型的字段,SQL Server中有char.varchar.nchar.nvarchar四种类型来对应,那么这四种类型有什么区别呢,这里做一下对比. 1.定长或变长 所谓定长就是长度固定,当要保存的数据长度不够时将自动在其后面填充英文空格,使长度达到相应的长度:有var前缀的,表示是实际存储空间是动态变化的,比如varchar,nvarchar变长字符数据则不会以空格填充. 2.Unicode或非Unicode 数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众

SQL Server中MDF文件和LDF文件的区别

环境:SQLServer 2008 R2 .mdf:数据库数据文件,存放一个数据库的数据信息. .ldf:数据库日志文件,存放对该数据库的更新操作(增.删.改)的文件.

SQL Server 中的6种事务隔离级别简单总结

原文:SQL Server 中的6种事务隔离级别简单总结   本文出处:http://www.cnblogs.com/wy123/p/7218316.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他)   数据库中的事物是具有原子性(Atomicity),一致性(Consistemcy),隔离性(Isolation),持久性(Durability)四个特征.在上述四个特性中的一致性和隔离性的实现中,是通过锁来实

SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因

原文:SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因 原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中的事务概念,ACID 原则,事务中常见的问题,问题造成的原因和事务隔离级别等这些方面的知识好好的整理了一下. 其实有关 SQL Server 中的事务,说实话因为内容太多, 话题太广,稍