qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

实例演示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分配的资源也最小。

 2、READ COMMITTED,提交读,默认的事务隔离级别,会造成不可重复读。

  初始化:

drop Table tranlevel

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)

  Query3:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

BEGIN TRAN Query3

-- 等待10秒,再修改数据

WAITFOR DELAY '00:00:10'

UPDATE TranLevel SET val = 10

COMMIT TRAN Query3

  Query 4:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

BEGIN TRAN Query4

SELECT '查到的是Query3没有提交前的数据'

SELECT * FROM TranLevel

SELECT '让Query3执行完'

WAITFOR DELAY '00:00:10'

SELECT '再次查询,数据就变成Query3执行完后的数据了'

SELECT * FROM TranLevel

COMMIT TRAN Query4

  执行Query3后,新建查询执行Query4。下面看看Querry4查询得到的数据。

  结果就是Query4中的事务查询获得了在Query3提交后的数据,在同一事务中读取的数据不一致,造成了不可重复读。

posted on 2013-05-24 10:27 顺其自然EVO 阅读(197) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2013年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜