2011-07-19 30 views

回答

0

如果場x被索引,那麼很可能會發生在當你的UPDATE正在檢查它匹配記錄該索引共享鎖。

不應該有任何行鎖,但所有的鎖定行爲是偶然在你server-level isolation settings.

0

您可以使用此腳本玩,看看自己,有時獲取鎖定,甚至舉行,屆時沒有行被更新:

CREATE TABLE dbo.Test 
    (
     i INT NOT NULL 
      PRIMARY KEY , 
     j INT NULL 
    ) ; 
go 

INSERT dbo.Test 
     (i, j) 
VALUES (1, 2) ; 
GO 

SELECT @@spid ; 

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ; 

BEGIN TRANSACTION ; 

UPDATE dbo.Test 
SET  j = 3 
WHERE i = 3 ; 

SELECT * 
FROM sys.dm_tran_locks 
WHERE request_session_id = @@spid; 

COMMIT ; 
0

如果使用不影響記錄的更新語句,則在事務中爲更新語句採用排它意向鎖,因爲首先選擇影響行,然後在表上進行更新,但是因爲沒有需要更新的行,所以這個intent鎖定是tak en在專用模式下的交易表上。

相關問題