关闭

实例演示SQL Server中五个事务隔离的区别

发表于:2013-5-23 09:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ProJKY    来源:51Testing软件测试网采编

  网上里有很不错的介绍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分配的资源也最小。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号