我試圖重現問題[1]的情況。瞭解SQL Server中的鎖定行爲
在表中,取出並從維基的填充數據 「隔離(數據庫系統)」[2],在SQL Server 2008 R2 SSMS
,我執行:
1)首先在第一個選項卡(窗) SSMS
-- transaction isolation level in first window does not influence results (?)
-- initially I thought that second transaction in 2) runs at the level set in first window
begin transaction
INSERT INTO users VALUES (3, 'Bob', 27)
waitfor delay '00:00:22'
rollback
2)後,立即在第二窗口的
-- this is what I commented/uncommented
-- set transaction isolation level SERIALIZABLE
-- set transaction isolation level READ REPEATABLE
-- set transaction isolation level READ COMMITTED
-- set transaction isolation level READ UNCOMMITTED
SELECT * FROM users --WITH(NOLOCK)
更新:
對不起,結果已更正。
我的結果,取決於)在2設置隔離級別,是SELECT返回:
- 立即
(讀未提交的插入行)
- 與NOLOCK SELECT所有病例
- (未選擇NOLOCK)
等待事務1的完成)(ONLY IF SELECT是不NOLOCK)和
- 在READ COMMITTED和更高的(可重複READ,SERIALIZABLE)事務隔離級別
這些結果與問題描述的情況相矛盾(並且在答案中解釋?)[1]
(例如,SELECT with NOCHECK is waiting completion of 1))等等。
我的結果和[1]如何解釋?
UPDATE2:
這個問題確實是我的問題subquestion [3](或他們的結果沒有回答)。
引:
[1]
解釋在SQL Server鎖定行爲
Explain locking behavior in SQL Server
[2]
「隔離(數據庫系統)」
PLZ加尾)進行鏈接。我無法在鏈接中保留它! http://en.wikipedia.org/wiki/Isolation_(database_systems)
[3]
NOLOCK是SQL Server 2005中SELECT語句的默認值嗎?
Is NOLOCK the default for SELECT statements in SQL Server 2005?
插入事務的隔離級別不會影響第二個事務看到的東西。你確定你的第二筆交易沒有在「未讀未讀」級別下運行嗎? – 2010-10-08 12:38:35