0
由於兩筆交易:可重複讀取隔離級別鎖定所有表以進行更新嗎?
T1
set transaction isolation level repeatable read;
begin transaction
select * from tmp where val=1;
update tmp set txt='rerwer11' where val=1;
waitfor delay '00:00:7';
commit;
T2
set transaction isolation level repeatable read;
begin transaction
select * from tmp where val=2;
update tmp set txt='rerwer11' where val=2;
commit;
開始T1,雖然它在執行發射T2。我認爲第一個事務只鎖定val=1
的行,因此第二個事務不必被阻塞,因爲處理了其他行。但事實證明,第二筆交易等待第一次完成。 如果我使用默認隔離級別(讀提交)對他們倆的,並與xlock
提示運行update
,一切就像我預期的:如果它試圖與val=1
我訴諸可重複的讀取以防止其他事務修改某些行。但爲什麼它鎖定所有表?是否只需鎖定已讀取的行? – DotNetter
可重複讀取鎖只讀正在讀取的行,只有可序列化獲取範圍鎖直到事務結束 – TheGameiswar
查看爲什麼表被阻止,請參閱sys.dm_tran_locks – TheGameiswar