国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Sqlserver 中select with(nolock)等同于READUNCOMMITTED臟讀的理解和實(shí)驗(yàn)

這篇具有很好參考價(jià)值的文章主要介紹了Sqlserver 中select with(nolock)等同于READUNCOMMITTED臟讀的理解和實(shí)驗(yàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

https://learn.microsoft.com/zh-cn/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16
https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16
以上官方文檔說(shuō)NOLOCK 等效于 READUNCOMMITTED,不過(guò)我個(gè)人認(rèn)為READUNCOMMITTED是針對(duì)整個(gè)會(huì)話而言,NOLOCK針對(duì)某表而言,就功能而言?xún)烧邲](méi)有太大的區(qū)別

READUNCOMMITTED
指定允許臟讀。 不發(fā)布共享鎖來(lái)阻止其他事務(wù)修改當(dāng)前事務(wù)讀取的數(shù)據(jù),其他事務(wù)設(shè)置的排他鎖不會(huì)阻礙當(dāng)前事務(wù)讀取鎖定數(shù)據(jù)。 允許臟讀可能產(chǎn)生較多的并發(fā)操作,但其代價(jià)是讀取以后會(huì)被其他事務(wù)回滾的數(shù)據(jù)修改。 這可能會(huì)使您的事務(wù)出錯(cuò),向用戶(hù)顯示從未提交過(guò)的數(shù)據(jù),或者導(dǎo)致用戶(hù)兩次看到記錄(或根本看不到記錄)。

READUNCOMMITTED 和 NOLOCK 提示僅適用于數(shù)據(jù)鎖。 所有查詢(xún)(包括那些帶有 READUNCOMMITTED 和 NOLOCK 提示的查詢(xún))都會(huì)在編譯和執(zhí)行過(guò)程中獲取 Sch-S(架構(gòu)穩(wěn)定性)鎖。 因此,當(dāng)并發(fā)事務(wù)持有表的 Sch-M(架構(gòu)修改)鎖時(shí),將阻塞查詢(xún)。 例如,數(shù)據(jù)定義語(yǔ)言 (DDL) 操作在修改表的架構(gòu)信息之前獲取 Sch-M 鎖。 所有并發(fā)查詢(xún)(包括那些使用 READUNCOMMITTED 或 NOLOCK 提示運(yùn)行的查詢(xún))都會(huì)在嘗試獲取 Sch-S 鎖時(shí)被阻塞。 相反,持有 Sch-S 鎖的查詢(xún)將阻塞嘗試獲取 Sch-M 鎖的并發(fā)事務(wù)。

不能為通過(guò)插入、更新或刪除操作修改過(guò)的表指定 READUNCOMMITTED 和 NOLOCK。 SQL Server 查詢(xún)優(yōu)化器忽略 FROM 子句中應(yīng)用于 UPDATE 或 DELETE 語(yǔ)句的目標(biāo)表的 READUNCOMMITTED 和 NOLOCK 提示。

備注:在 SQL Server 的未來(lái)版本中,將不再支持在 FROM 子句中使用應(yīng)用于 UPDATE 或 DELETE 語(yǔ)句目標(biāo)表的 READUNCOMMITTED 和 NOLOCK 提示。 請(qǐng)避免在新的開(kāi)發(fā)工作上下文中使用這些提示,并計(jì)劃修改當(dāng)前使用它們的應(yīng)用程序。

實(shí)驗(yàn)
會(huì)話1

CREATE TABLE testtable1 (h1 int,h2 char(200),h3 char(200))
begin transaction insert1
declare @i int 
set @i=1 
while @i<1000
begin
   insert into testtable1 (h1,h2,h3)
    values(@i,'hhhhhh2','hhhhhh3');
   set @i=@i+1;
   waitfor delay'00:00:01:00'
   end
commit transaction insert1

會(huì)話2

select count(*) from testtable1 with(nolock) 
GO
select count(*) from testtable1 

在會(huì)話1的事務(wù)提交之前,會(huì)話2執(zhí)行幾次的結(jié)果中,第一條命令select count() from testtable1 with(nolock)的結(jié)果會(huì)增加,比如10,11,12條記錄這樣子,但是select count() from testtable1的結(jié)果一直是0,說(shuō)明with(nolock)確實(shí)讀的是臟數(shù)據(jù),如果會(huì)話2 with(nolock)給用戶(hù)展示數(shù)據(jù)后,會(huì)話1回滾了,那么會(huì)話2 with(nolock)給用戶(hù)展示的數(shù)據(jù)就是錯(cuò)誤數(shù)據(jù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-526480.html

到了這里,關(guān)于Sqlserver 中select with(nolock)等同于READUNCOMMITTED臟讀的理解和實(shí)驗(yàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包