程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server中五個事務隔離有什麼區別

SQL Server中五個事務隔離有什麼區別

編輯:關於SqlServer

園子裡有很不錯的介紹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分配的資源也最小。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved