2010-05-27 101 views
0

我曾想過下面的SQL語句:插入獨佔鎖定

INSERT INTO A(a1, a2) 
SELECT b1, udf_SomeFunc(b1) 
FROM B 

凡udf_SomeFunc做出選擇上表A根據我的理解,首先,共享鎖設置在A(我說的只是表A),然後,在釋放該鎖之後,獲得獨佔鎖以插入數據。問題是:是否有可能,在當前事務在A上獨佔Lok之前,另一個事務將獲得對錶A的排他鎖定?

回答

1

在一個窗口深思現在

create table test(id int) 

insert test values(1) 
GO 

運行此

begin tran 


insert into test 
select * from test with (holdlock, updlock) 
waitfor delay '00:00:30' 
commit 

同時運行打開另一個連接,併爲此

begin tran 

insert into test 
select * from test with (holdlock, updlock) 
commit 

,你可以看到第二插入不會發生,直到第一筆交易完成

現在拿出鎖定提示和觀察者的區別