加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2016-01-14 18:05:02 所属栏目:MsSql教程 来源:网络整理
导读:园子里有很不错的介绍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中五个事务隔离有什么区别

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

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读