sqlserver鎖和事務隔離級別的比較與使用

sqlserver鎖和事務隔離級別的比較與使用

ID:12144326

大?。?8.50 KB

頁數(shù):3頁

時間:2018-07-15

sqlserver鎖和事務隔離級別的比較與使用_第1頁
sqlserver鎖和事務隔離級別的比較與使用_第2頁
sqlserver鎖和事務隔離級別的比較與使用_第3頁
資源描述:

《sqlserver鎖和事務隔離級別的比較與使用》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫

1、SQLserver鎖和事務隔離級別的比較與使用對象①?????鎖:每條SQL語句②?????隔離:事務鎖①并發(fā)問題丟失更新未確認的讀取(臟讀)不一致的分析(非重復讀):多次讀取相同的數(shù)據(jù)(行)不一致(其他用戶更改update)幻像讀:多次讀取有不存在和新增的數(shù)據(jù)(其他用戶插入insert或刪除delete)隔離級別隔離級別臟讀不可重復讀取幻像說明未提交讀(readuncommitted)是是是如果其他事務更新,不管是否提交,立即執(zhí)行提交讀(readcommitted默認)否是是讀取提交過的數(shù)據(jù)。如果其他事務更新沒提交,則等待可重復讀(repe

2、atableread)否否是查詢期間,不允許其他事務update可串行讀(serializable)否否否查詢期間,不允許其他事務insert或delete提交讀假設存在表A,如下所示A1A2A3112131122232打開查詢分析器并打開兩個連接,分別輸入如下兩個事務:--事務ⅠSETTRANSACTIONISOLATIONLEVELREADCommittedbegintranupdateAsetA2=20whereA1=11waitfordelay'00:00:10'rollbacktran--事務ⅡSETTRANSACTIONISOLA

3、TIONLEVELREADCommittedselect*fromAwhereA1=11如果先運行事務Ⅰ,然后緊接著運行事務Ⅱ,則事務Ⅱ要等待10秒鐘(一個連接在修改數(shù)據(jù)塊時別的連接也不能查詢這個數(shù)據(jù)塊,直到解鎖。反之亦然:讀的時候不能寫和修改)。如果把事務Ⅱ改為如下SETTRANSACTIONISOLATIONLEVELREADUNCommittedselect*fromAwhereA1=11那么事務Ⅱ不需等待,立即執(zhí)行(可以看出READUNCommitted事務select不對數(shù)據(jù)發(fā)出共享鎖)鎖:(這里主要講解共享鎖和排他鎖兩種經(jīng)常用到的

4、鎖)共享鎖主要是為了共享讀(select),如果存在事務(一個或多個)擁有對表中數(shù)據(jù)(關于鎖數(shù)據(jù)的多少,視鎖的粒度而定)的共享鎖,不允許對鎖定的數(shù)據(jù)進行更新(update)(從鎖的角度講,即不允許事務獲取排他鎖,要等到所有的共享鎖都釋放掉)。反之,如果事務對數(shù)據(jù)已經(jīng)具有排他鎖(只能有一個),其他的事務就不能對鎖定的數(shù)據(jù)獲取共享鎖和排他鎖(即排他鎖與共享鎖不能兼容,更多信息請查看鎖兼容性),在此特別強調(diào)一下鎖定的數(shù)據(jù),因為有的資料上講解到“一個連接寫的時候,另一個連接可以寫”,實際上寫的這種情況是各個連接的讀寫的數(shù)據(jù)不是相同的行,也就是說各個連

5、接鎖定的數(shù)據(jù)不同。根據(jù)以上分析,我們總結為六個字為“共享讀,排他寫”。了解了鎖的情況之后,又涉及到一個問題。事務究竟要保持鎖多久呢?一般來說,共享鎖的鎖定時間與事務的隔離級別有關,如果隔離級別為ReadCommitted的默認級別,只在讀取(select)的期間保持鎖定,即在查詢出數(shù)據(jù)以后就釋放了鎖;如果隔離級別為更高的Repeatableread或Serializable,直到事務結束才釋放鎖。另說明,如果select語句中指定了HoldLock提示,則也要等到事務結束才釋放鎖。排他鎖直到事務結束才釋放。做出了以上分析,現(xiàn)在我們可能會存在這

6、樣的疑問,到底在執(zhí)行SQL語句的時候發(fā)出什么樣的鎖呢,這就由事務的隔離級別決定了。一般情況,讀語句(select)發(fā)出共享鎖,寫語句(update,insert,delete)發(fā)出排他鎖。但是,如果這樣不能滿足我們的要求怎么辦呢,有沒有更多選擇呢,別急,SQLserver為我們提供了鎖定提示的概念。???????鎖定提示對SQL語句進行特別指定,這個指定將覆蓋事務的隔離級別。下面對各個鎖定提示分別予以介紹(更多資料請查看SQLserver的聯(lián)機幫助),筆者做出了以下分類。類型1①?????READUNCOMMITTED:不發(fā)出鎖②?????R

7、EADCOMMITTED:發(fā)出共享鎖,保持到讀取結束③?????REPEATABLEREAD:發(fā)出共享鎖,保持到事務結束④?????SERIALIZABLE:發(fā)出共享鎖,保持到事務結束類型2①?????NOLOCK:不發(fā)出鎖。等同于READUNCOMMITTED②?????HOLDLOCK:發(fā)出共享鎖,保持到事務結束。等同于SERIALIZABLE③?????XLOCK:發(fā)出排他鎖,保持到事務結束。④?????UPDLOCK:發(fā)出更新鎖,保持到事務事務結束。(更新鎖:不阻塞別的事物,允許別的事物讀數(shù)據(jù)(即更新鎖可與共享鎖兼容),但他確保自上次

8、讀取數(shù)據(jù)后數(shù)據(jù)沒有被更新)⑤?????READPAST:發(fā)出共享鎖,但跳過鎖定行,它不會被阻塞。適用條件:提交讀的隔離級別,行級鎖,select語句中。類型3①??

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。