亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

深入分析MSSQL數據庫中事務隔離級別和鎖機制

2024-08-31 01:02:22
字體:
來源:轉載
供稿:網友
事務隔離級別簡單的說,就是當激活事務時,控制事務內因SQL語句產生的鎖定需要保留多入,影響范圍多大,以防止多人訪問時,在事務內發生數據查詢的錯誤。設置事務隔離級別將影響整條連接。
 
 

鎖機制
NOLOCK和READPAST的區別。

1.       開啟一個事務執行插入數據的操作。

BEGIN TRAN tINSERT INTO CustomerSELECT 'a','a'

2.       執行一條查詢語句。

SELECT * FROM Customer WITH (NOLOCK)

結果中顯示”a”和”a”。當1中事務回滾后,那么a將成為臟數據。(注:1中的事務未提交) 。NOLOCK表明沒有對數據表添加共享鎖以阻止其它事務對數據表數據的修改。

SELECT * FROM Customer

這條語句將一直死鎖,直到排他鎖解除或者鎖超時為止。(注:設置鎖超時SET LOCK_TIMEOUT 1800)

SELECT * FROM Customer WITH (READPAST)

這條語句將顯示a未提交前的狀態,但不鎖定整個表。這個提示指明數據庫引擎返回結果時忽略加鎖的行或數據頁。

3.       執行一條插入語句。

BEGIN TRAN tINSERT INTO CustomerSELECT 'b','b'COMMIT TRAN t

這個時候,即使步驟1的事務回滾,那么a這條數據將丟失,而b繼續插入數據庫中。

NOLOCK

1. 執行如下語句。

BEGIN TRAN tttSELECT * FROM Customer WITH (NOLOCK)WAITFOR delay '00:00:20'COMMIT TRAN ttt

注:NOLOCK不加任何鎖,可以增刪查改而不鎖定。

INSERT INTO Customer SELECT 'a','b' –不鎖定DELETE Customer where ID=1 –不鎖定SELECT * FROM Customer –不鎖定UPDATE Customer SET style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; font-family: 'Courier New', Courier, monospace; border-left-color: rgb(108, 226, 108); border-left-width: 3px; border-left-style: solid; width: 640px; clear: both; line-height: 20px; ">SET TRANSACTION ISOLATION LEVEL REPEATABLE READ -- (必須)BEGIN TRAN tttSELECT * FROM Customer WITH (ROWLOCK) WHERE ID=17WAITFOR delay '00:00:20'COMMIT TRAN ttt

注:在刪除和更新正在查詢的數據時,會鎖定數據。對其他未查詢的行和增加,查詢數據無影響。

INSERT INTO Customer SELECT 'a','b' –不等待DELETE Customer where ID=17 –等待DELETE Customer where ID<>17 –不等待SELECT * FROM Customer –不等待UPDATE Customer SET style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; font-family: 'Courier New', Courier, monospace; border-left-color: rgb(108, 226, 108); border-left-width: 3px; border-left-style: solid; width: 640px; clear: both; line-height: 20px; ">BEGIN TRAN tttSELECT * FROM Customer WITH (HOLDLOCK)WAITFOR delay '00:00:10'COMMIT TRAN ttt

注:其他事務可以讀取表,但不能更新刪除 

update Customer set style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; font-family: 'Courier New', Courier, monospace; border-left-color: rgb(108, 226, 108); border-left-width: 3px; border-left-style: solid; width: 640px; clear: both; line-height: 20px; ">BEGIN TRAN tttSELECT * FROM Customer WITH (TABLOCKX)WAITFOR delay '00:00:10'COMMIT TRAN ttt

注:其他事務不能讀取表,更新和刪除

update Customer set style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; font-family: 'Courier New', Courier, monospace; border-left-color: rgb(108, 226, 108); border-left-width: 3px; border-left-style: solid; width: 640px; clear: both; line-height: 20px; ">BEGIN TRAN tttSELECT * FROM Customer WITH (TABLOCK)WAITFOR delay '00:00:10'COMMIT TRAN ttt

注:其他事務可以讀取表,但不能更新刪除 

update Customer set style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; font-family: 'Courier New', Courier, monospace; border-left-color: rgb(108, 226, 108); border-left-width: 3px; border-left-style: solid; width: 640px; clear: both; line-height: 20px; ">BEGIN TRAN tttSELECT * FROM Customer WITH (UPDLOCK)WAITFOR delay '00:00:10'COMMIT TRAN ttt

2.       在其他連接中執行。

update Customer set style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; font-family: 'Courier New', Courier, monospace; border-left-color: rgb(108, 226, 108); border-left-width: 3px; border-left-style: solid; width: 640px; clear: both; line-height: 20px; ">BEGIN TRAN tINSERT INTO CustomerSELECT '123','123'WAITFOR delay '00:00:20'COMMIT TRAN t

2.       在B連接中執行。

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDSELECT * FROM Customer

這個時候,未提交的數據會'123'會顯示出來,當A事務回滾時就導致了臟數據。相當于(NOLOCK)

提交讀:READ COMMITTED

1.       在A連接中執行。

BEGIN TRAN tINSERT INTO CustomerSELECT '123','123'WAITFOR delay '00:00:20'COMMIT TRAN t

2.       在B連接中執行。

SET TRANSACTION ISOLATION LEVEL READ COMMITTEDSELECT * FROM Customer

這個時候,未提交的數據會'123'不會顯示出來,當A事務提交以后B中才能讀取到數據。避免了臟讀。

不可重復讀:REPEATABLE READ

不可重復讀是指在一個事務內,多次讀同一數據。在這個事務還沒有結束時,另外一個事務也訪問該同一數據。那么,在第一個事務中的兩次讀數據之間,由于第二個事務的修改,那么第一個事務兩次讀到的數據可能是不一樣的。這樣就發生了在一個事務內兩次讀到的數據是不一樣的,因此稱為是不可重復讀。

例如:

1.       在A連接中執行如下語句。

SET TRANSACTION ISOLATION LEVEL REPEATABLE READBEGIN TRAN tttSELECT * FROM Customer WHERE ID=17WAITFOR delay '00:00:30'SELECT * FROM Customer WHERE ID=17COMMIT TRAN ttt

2.       在B連接中執行如下語句,而且要在第一個事物的三十秒等待內。

UPDATE Customer SET style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; font-family: 'Courier New', Courier, monospace; border-left-color: rgb(108, 226, 108); border-left-width: 3px; border-left-style: solid; width: 640px; clear: both; line-height: 20px; ">SET TRANSACTION ISOLATION LEVEL SERIALIZABLEBEGIN TRAN tUPDATE Customer SET style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; font-family: 'Courier New', Courier, monospace; border-left-color: rgb(108, 226, 108); border-left-width: 3px; border-left-style: solid; width: 640px; clear: both; line-height: 20px; ">BEGIN TRAN ttINSERT INTO CustomerSELECT '2','2'COMMIT TRAN tt

在A連接的事務提交之前,B連接無法插入數據到表中,這就避免了幻覺讀。

注:幻覺讀是指當事務不是獨立執行時發生的一種現象,例如 第一個事務對一個表中的數據進行了修改,這種修改涉及到表中的全部數據行。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那么,以后就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,就好像發生了幻覺一樣。

共享鎖

共享鎖(S 鎖)允許并發事務在封閉式并發控制(請參閱并發控制的類型)下讀取 (SELECT) 資源。資源上存在共享鎖(S 鎖)時,任何其他事務都不能修改數據。讀取操作一完成,就立即釋放資源上的共享鎖(S 鎖),除非將事務隔離級別設置為可重復讀或更高級別,或者在事務持續時間內用鎖定提示保留共享鎖(S 鎖)。

更新鎖

更新鎖(U 鎖)可以防止常見的死鎖。在可重復讀或可序列化事務中,此事務讀取數據 [獲取資源(頁或行)的共享鎖(S 鎖)],然后修改數據 [此操作要求鎖轉換為排他鎖(X 鎖)]。如果兩個事務獲得了資源上的共享模式鎖,然后試圖同時更新數據,則一個事務嘗試將鎖轉換為排他鎖(X 鎖)。共享模式到排他鎖的轉換必須等待一段時間,因為一個事務的排他鎖與其他事務的共享模式鎖不兼容;發生鎖等待。第二個事務試圖獲取排他鎖(X 鎖)以進行更新。由于兩個事務都要轉換為排他鎖(X 鎖),并且每個事務都等待另一個事務釋放共享模式鎖,因此發生死鎖。

若要避免這種潛在的死鎖問題,請使用更新鎖(U 鎖)。一次只有一個事務可以獲得資源的更新鎖(U 鎖)。如果事務修改資源,則更新鎖(U 鎖)轉換為排他鎖(X 鎖)。

排他鎖

排他鎖(X 鎖)可以防止并發事務對資源進行訪問。使用排他鎖(X 鎖)時,任何其他事務都無法修改數據;僅在使用 NOLOCK 提示或未提交讀隔離級別時才會進行讀取操作。

數據修改語句(如 INSERT、UPDATE 和 DELETE)合并了修改和讀取操作。語句在執行所需的修改操作之前首先執行讀取操作以獲取數據。因此,數據修改語句通常請求共享鎖和排他鎖。例如,UPDATE 語句可能根據與一個表的聯接修改另一個表中的行。在此情況下,除了請求更新行上的排他鎖之外,UPDATE 語句還將請求在聯接表中讀取的行上的共享鎖。


上一篇:淺析SQL Server中包含事務的存儲過程

下一篇:MSSQL與Oracle數據庫事務隔離級別與鎖機制對比

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片
猜你喜歡的新聞
猜你喜歡的關注

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品aaa| 国产精品一区二区久久精品| 精品国产1区2区| 神马久久久久久| 国产精品网站入口| 国产精品欧美日韩| 亚洲一区二区免费在线| 国产成+人+综合+亚洲欧洲| 国产日韩欧美日韩| 亚洲一区美女视频在线观看免费| 岛国精品视频在线播放| 成人福利网站在线观看11| 久久免费视频在线观看| 亚洲成年人在线播放| 精品美女久久久久久免费| 国产在线拍揄自揄视频不卡99| 日本精品一区二区三区在线播放视频| 亚洲aa在线观看| 久久的精品视频| 国产99久久久欧美黑人| 亚洲一区www| 亚洲欧美日韩一区在线| 国产精品1234| 国产成人97精品免费看片| 91亚洲精华国产精华| 国产亚洲欧美日韩一区二区| 亚洲男人天堂九九视频| 国产日韩欧美视频在线| 日本韩国欧美精品大片卡二| 国产美女直播视频一区| 国产精品美女久久久免费| 国产成人精品亚洲精品| 久久精品亚洲94久久精品| 亚洲精品网址在线观看| 亚洲毛片在线免费观看| 久久久999精品免费| 亚洲人成在线观| 91精品免费久久久久久久久| 好吊成人免视频| 精品福利免费观看| 亚洲欧美日韩爽爽影院| 亚洲天堂2020| 欧美午夜片欧美片在线观看| 三级精品视频久久久久| 伊人伊成久久人综合网站| 激情成人中文字幕| 国产久一一精品| 中文字幕在线观看日韩| 欧美国产日韩精品| 欧美成人中文字幕| 国产精品美乳一区二区免费| 最新91在线视频| 国产精品三级网站| 欧美日韩999| 欧美成人午夜影院| 亚洲性xxxx| 韩国美女主播一区| 国产精品视频久久久| 日本精品久久久久久久| 日本一区二区不卡| 国产视频亚洲视频| 亚洲综合中文字幕在线| 日韩久久免费视频| 亚洲人成五月天| 亚洲国产高潮在线观看| 最近日韩中文字幕中文| 国产精品日韩av| 日韩精品高清在线| 国产精品高潮视频| 国产a∨精品一区二区三区不卡| 国产精品美女在线观看| 欧美成人午夜视频| 555www成人网| 国产精品免费一区| 久久久久久一区二区三区| 一区二区亚洲精品国产| 91亚洲精品一区二区| 欧美日韩精品二区| 欧美xxxx做受欧美.88| 7777精品视频| 欧美国产日韩一区二区在线观看| 国产精品久久久久久久久粉嫩av| 日韩亚洲欧美中文高清在线| 欧美亚洲在线视频| 国产成人高清激情视频在线观看| 一区三区二区视频| 午夜精品免费视频| 欧美—级高清免费播放| 欧美日本高清视频| 精品中文字幕久久久久久| 日韩精品在线视频美女| 成人免费自拍视频| 亚洲成色777777在线观看影院| 国产美女精品免费电影| 日韩av在线精品| 欧美激情免费在线| 黄色91在线观看| 国产日韩av在线播放| 欧美日韩免费区域视频在线观看| 精品av在线播放| 日韩成人激情影院| 91国内在线视频| 久久视频在线看| www欧美日韩| 一区二区三区日韩在线| 国产精品69久久久久| 国产男女猛烈无遮挡91| 日韩精品极品视频免费观看| 国产a∨精品一区二区三区不卡| 欧美韩国理论所午夜片917电影| 538国产精品一区二区免费视频| 欧美最猛性xxxxx免费| 欧美激情久久久久| 欧美激情综合色| 亚洲午夜久久久久久久| 97在线精品视频| 成人av在线亚洲| 国精产品一区一区三区有限在线| 色婷婷亚洲mv天堂mv在影片| 久久精品国产精品亚洲| 国产精品中文字幕久久久| 综合激情国产一区| 精品视频一区在线视频| 91国产高清在线| 中文字幕在线观看日韩| 色偷偷av亚洲男人的天堂| 91在线观看免费| 成人免费高清完整版在线观看| 伊人伊成久久人综合网站| 中文字幕精品影院| 日韩免费观看在线观看| 精品国产乱码久久久久酒店| 国产www精品| 国产免费成人av| 久久成人精品视频| 国产亚洲精品久久久久久| 久久噜噜噜精品国产亚洲综合| 欧美大片在线看免费观看| 亚洲电影在线观看| 国产日韩中文字幕| 日本亚洲欧洲色α| 亚洲人精选亚洲人成在线| 欧美在线性爱视频| 91色p视频在线| 日韩经典中文字幕在线观看| 亚洲大胆人体在线| 亚洲精品一区中文字幕乱码| 欧美天天综合色影久久精品| 日本不卡视频在线播放| 欧美一区第一页| 日韩av在线免费播放| 亚洲欧美三级伦理| 国产一区二区三区三区在线观看| 日韩国产精品亚洲а∨天堂免| 亚洲综合日韩在线| 国产免费一区二区三区在线观看| 久久国产加勒比精品无码| 国产精品v日韩精品| 亚洲欧美999| 欧美夫妻性视频| 成人免费午夜电影| 国产精品福利网| xx视频.9999.com| 精品无人区太爽高潮在线播放|