0
首先抱歉,如果我的英文不好。tsql事務級別明智鎖定
我現在面臨一個問題,相對於事務隔離級別。我目前的隔離級別是讀取提交的,但它會導致表鎖定有時。 例如
create table tmp(id int,name varchar(20))
insert into tmp(id,name)
values(1,'Binesh')
,(2,'Bijesh')
,(3,'Bibesh')
begin transaction
update tmp set name ='Harish' where id=2
我試圖在另一個查詢窗口
select * from tmp where id=1
它鎖定表,以便它不給予任何記錄,直到我回滾獲取或提交的第一個
我試圖
ALTER DATABASE db
SET READ_COMMITTED_SNAPSHOT On
ALTER DATABASE db
SET ALLOW_SNAPSHOT_ISOLATION on
它不鎖定表,但它給老id的值= 2
select * from tmp where id=2
返回我Bijesh,我很期待鎖定
我期待的方式一樣,如果ID = 1它會正常工作,但如果ID = 2它將等待直到其他交易結束。
公司希望你的幫助.....提前
感謝
Binesh南比亞爾Ç
SQL Server是**不**鎖定表 - 它被鎖定的行(帶ID值從1到3)你是剛插入。那些不能被讀取 - 直到INSERT被提交。 –
使用WITH NOLOCK它將解決您的問題 – mohan111
感謝您的重播,並且非常感謝您爲我編寫問題。我還認爲marc告訴我們迄今爲止(最近10年)。但是目前有些項目開始執行計劃任務中的死鎖。這導致了這個實驗。在我的示例中插入不在任何事務中。如果你有疑問嘗試一次在查詢窗口中... –