SELECT 語(yǔ)句中“加鎖選項(xiàng)”的功能說(shuō)明
SQL Server提供了強(qiáng)大而完備的鎖機(jī)制來(lái)幫助實(shí)現(xiàn)數(shù)據(jù)庫(kù)系統(tǒng)的并發(fā)性和高性能。用戶既能使用SQL Server的缺省設(shè)置也可以在select 語(yǔ)句中使用“加鎖選項(xiàng)”來(lái)實(shí)現(xiàn)預(yù)期的效果。 本文介紹了SELECT語(yǔ)句中的各項(xiàng)“加鎖選項(xiàng)”以及相應(yīng)的功能說(shuō)明。
功能說(shuō)明:
NOLOCK(不加鎖)
此選項(xiàng)被選中時(shí),SQL Server 在讀取或修改數(shù)據(jù)時(shí)不加任何鎖。 在這種情況下,用戶有可能讀取到未完成事務(wù)(Uncommited Transaction)或回滾(Roll Back)中的數(shù)據(jù), 即所謂的“臟數(shù)據(jù)”。
HOLDLOCK(保持鎖)
此選項(xiàng)被選中時(shí),SQL Server 會(huì)將此共享鎖保持至整個(gè)事務(wù)結(jié)束,而不會(huì)在途中釋放。
UPDLOCK(修改鎖)
此選項(xiàng)被選中時(shí),SQL Server 在讀取數(shù)據(jù)時(shí)使用修改鎖來(lái)代替共享鎖,并將此鎖保持至整個(gè)事務(wù)或命令結(jié)束。使用此選項(xiàng)能夠保證多個(gè)進(jìn)程能同時(shí)讀取數(shù)據(jù)但只有該進(jìn)程能修改數(shù)據(jù)。
TABLOCK(表鎖)
此選項(xiàng)被選中時(shí),SQL Server 將在整個(gè)表上置共享鎖直至該命令結(jié)束。 這個(gè)選項(xiàng)保證其他進(jìn)程只能讀取而不能修改數(shù)據(jù)。
PAGLOCK(頁(yè)鎖)
此選項(xiàng)為默認(rèn)選項(xiàng), 當(dāng)被選中時(shí),SQL Server 使用共享頁(yè)鎖。
TABLOCKX(排它表鎖)
此選項(xiàng)被選中時(shí),SQL Server 將在整個(gè)表上置排它鎖直至該命令或事務(wù)結(jié)束。這將防止其他進(jìn)程讀取或修改表中的數(shù)據(jù)。
使用這些選項(xiàng)將使系統(tǒng)忽略原先在SET語(yǔ)句設(shè)定的事務(wù)隔離級(jí)別(Transaction Isolation Level)。 請(qǐng)查閱SQL Server 聯(lián)機(jī)手冊(cè)獲取更多信息。