time 
设为首页】【收藏本站
当前位置: 主页 > 数据库 > SQL Server > SQL 基础 > SQL Server五个事务隔离的区别实践

SQL Server五个事务隔离的区别实践

时间:2013-05-20 00:10 点击:1004次 字体:[ ]




对那些初学者来说,看得见摸得着的理解才深刻,故不再重复,重点在于实例演示上面。

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

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

初始化:

  1. CREATE TABLE TranLevel (k int IDENTITY(1,1), val int)  
  2.  
  3. INSERT INTO TranLevel(val) values(1)  
  4.  
  5. INSERT INTO TranLevel(val) values(2)  
  6.  
  7. INSERT INTO TranLevel(val) values(3) 

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

Query1:

  1. BEGIN TRAN Query1  
  2.  
  3. -- 在事务中修改  
  4.  
  5. UPDATE TranLevel SET val = 9  
  6.  
  7. --  '等待10秒,期间事务2运行'  
  8.  
  9. WAITFOR DELAY '00:00:10' 
  10.  
  11. -- 不提交修改,回滚事务  
  12.  
  13. ROLLBACK TRAN Query1 

Query2:

  1. -- 设置当前会话事务隔离级别为未提交读  
  2.  
  3. SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
  4.  
  5. BEGIN TRAN Query2  
  6.  
  7. SELECT '事务2开始并发执行,读取到了事务1修改了但没有提交的数据,是脏读' 
  8.  
  9. SELECT * FROM Tranlevel  
  10.  
  11. SELECT '事务2等待10秒,让事务1执行完' 
  12.  
  13. WAITFOR DELAY '00:00:10' 
  14.  
  15. SELECT '两次读取的结果不一致,是不可重复读' 
  16.  
  17. SELECT * FROM TranLevel  
  18.  
  19. COMMIT TRAN Query2 

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

SQL Server五个事务隔离的区别实践_www.fengfly.com

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



本文地址 : http://www.fengfly.com/plus/view-212730-1.html
标签: SQL Server 区别 事务隔离
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: