2015-02-24 78 views
1

我似乎無法找到一個簡單的答案,應該是一個簡單的問題。如果我在T-SQL中創建一個事務並將ISOLATION LEVEL設置爲SERIALIZABLE,這是否會在我正在修改的表上創建一個READ鎖定?是否TRANSACTION ISOLATION LEVEL SERIALIZABLE創建READ鎖

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 
GO 
BEGIN TRANSACTION; 
GO  
TRUNCATE TABLE TBL_PRODUCTS; 
GO 
    **INSERT RECORDS HERE** 
GO 
    COMMIT TRANSACTION; 
GO 

回答

1

TRUNCATE TABLE將獲得 獨家 瑪修改鎖在桌子上防止所有用戶從表 閱讀(除非他們使用 TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDWITH(NOLOCK)和寫入表(寫作沒有例外)。獨家鎖定將在COMMIT TRANSACTION發佈。

編輯:正如Martin Smith在他下面的評論中指出的那樣,truncate表會獲得一個schema修改鎖。這意味着沒有其他用戶將能夠讀取或修改表,直到發生提交或回滾。

+0

'NOLOCK'仍然不允許讀取表。它仍然需要模式穩定性鎖定。截斷需要一個'Sch-M'來鎖定這個鎖。 – 2015-02-24 19:38:37

0

是的,這將鎖定表,這些都是規則序列化:

  • 聲明不能讀取已修改但其他事務尚未提交的數據。
  • 沒有其他事務可以修改當前事務讀取的數據,直到當前事務完成。
  • 其他事務不能插入具有鍵值的新行,這些鍵值落在當前事務中任何語句讀取的鍵的範圍內,直到當前事務完成。

https://msdn.microsoft.com/en-us/library/ms173763.aspx

相關問題