前言
時間流逝比較快,博主也在快馬加鞭學(xué)習(xí)SQL Server,下班回來再晚也不忘記更新下博客,時間擠擠總會有的,現(xiàn)在的努力求的是未來所謂的安穩(wěn),每學(xué)一門為的是深度而不是廣度,求的是知識自成體系而不是零散,廢話不多說本節(jié)我們來講講SQL Server基礎(chǔ)系列最后幾節(jié)內(nèi)容,這話博主說了n次,呵呵。
NOLOCK和READPAST
NOLOCK
隨便翻翻博客園對于各種鎖的介紹真的是一個字【多】,僅僅介紹其概念,再要么就是轉(zhuǎn)載其概念,不知道那些轉(zhuǎn)載概念的園友是否已經(jīng)弄懂了,稍微發(fā)下感慨。NOLOCK在概念上類似于READ UNCOMMITTED隔離級別,并且只針對于SELECT查詢語句,它不會獲取表的共享鎖,換句話說不會阻止排它鎖來更新數(shù)據(jù)行。當(dāng)我們對表進行NOLOCK有什么好處呢?它能夠提高并發(fā)性能,因為此時SQL Server數(shù)據(jù)庫引擎不必去維護共享鎖,由于不會對正在讀取的表獲取貢獻鎖,所以可能導(dǎo)致未提交的事務(wù)也會被讀取,所以此時缺點顯而易見將導(dǎo)致臟讀,至于臟讀是何含義則無需我再多講。我們重點的明白什么情況下應(yīng)該用NOLOCK。我們看下實際例子來理解NOLOCK,建立測試表并插入300條測試數(shù)據(jù):
IF OBJECT_ID('Example')>0 DROP TABLE Example; GO CREATE TABLE [dbo].[Example] ( [SaleID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [Product] [char](150) NULL, &nbs