對(duì)于select語句:
1、當(dāng)採用表掃描時(shí),會(huì)直接鎖定page,而不是鎖定詳細(xì)的某條記錄,所以會(huì)有這些鎖:
A、數(shù)據(jù)庫S鎖
B、表的IS鎖
C、頁的S鎖
2、當(dāng)採用索引來查找數(shù)據(jù)時(shí),會(huì)鎖定詳細(xì)的記錄,所以會(huì)有這些鎖:
A、數(shù)據(jù)庫S鎖
B、索引中page的 IS鎖
C、索引中page中的key的S鎖
D、表的IS鎖
E、頁的IS鎖
F、RID的S鎖
3、對(duì)于讀過的頁面,會(huì)加一個(gè)IS鎖。
對(duì)于使用的索引,會(huì)對(duì)key加上S鎖,對(duì)索引key所在的頁面會(huì)加上IS鎖。
在查詢過程中,會(huì)對(duì)每一條讀到的記錄或key加上S鎖。
假設(shè)記錄不是我們要查找的,那么就會(huì)釋放S鎖,假設(shè)記錄要返回,依據(jù)隔離級(jí)別,假設(shè)是read committed,那么會(huì)釋放,否則就不會(huì)釋放。
對(duì)于update語句:
1、當(dāng)採用表掃描時(shí),會(huì)直接鎖定page,而不是鎖定詳細(xì)的某條記錄,所以會(huì)有這些鎖:
A、數(shù)據(jù)庫S鎖
B、表的IX鎖
C、頁的U鎖 或者是X鎖,兩者的差別在于,因?yàn)閡pdate語句也是要先找到數(shù)據(jù),才干進(jìn)行改動(dòng),所以在查數(shù)據(jù)時(shí),會(huì)對(duì)頁加上IU鎖,然后在繼續(xù)查看頁中的記錄時(shí),會(huì)先對(duì)記錄加上U鎖,假設(shè)發(fā)現(xiàn)這條記錄,不是須要更新的,那么會(huì)馬上釋放U鎖,假設(shè)發(fā)現(xiàn)這條記錄就是要更新的,那么就會(huì)加上X鎖,然后update這條記錄,然后查看下一條記錄。
2、當(dāng)採用索引來查找數(shù)據(jù)時(shí),會(huì)索引詳細(xì)的記錄,所以會(huì)有這些鎖:
A、數(shù)據(jù)庫S鎖
B、索引中page的 IU鎖
C、索引中page中的key的U鎖,也就是不希望別的會(huì)話來改動(dòng)這條記錄的key字段,比方如今有2個(gè)會(huì)話,1個(gè)要改動(dòng)第10條記錄的name字段,還有一個(gè)是要改動(dòng)第10條記錄的key字段,顯然,在一個(gè)會(huì)話改動(dòng)同一條記錄的name字段時(shí),肯定會(huì)堵塞住還有一個(gè)會(huì)話改動(dòng)key字段。也就是說,對(duì)同一條記錄的不同字段,肯定是不能同一時(shí)候改動(dòng)的,總是有個(gè)先后,否則數(shù)據(jù)就不一致了。
D、表的IX鎖
E、頁的IU鎖 或者是IX鎖,這個(gè)差別和上面是一樣的,查詢時(shí)用的是IU鎖,當(dāng)發(fā)現(xiàn)這個(gè)頁內(nèi)部有須要改動(dòng)的記錄時(shí),會(huì)轉(zhuǎn)化為IX鎖。
F、RID的X鎖
3、對(duì)每個(gè)使用的索引,會(huì)對(duì)key加上U鎖,對(duì)索引key所在的頁面會(huì)加上IU鎖。
因?yàn)閡pdate也須要先找到記錄,然后才干更新,所以,在掃描過程中,對(duì)要掃描的記錄所在的頁,加上IU鎖,對(duì)頁中的記錄加上U鎖,假設(shè)這些記錄要改動(dòng),那么會(huì)升級(jí)為X鎖,頁面會(huì)升級(jí)為IX鎖。假設(shè)這個(gè)記錄不須要更新,那么會(huì)釋放U鎖,假設(shè)整個(gè)頁面都沒有要改動(dòng)的記錄,那么也會(huì)釋放IU鎖。
另外,使用到要改動(dòng)列的索引越多,那么鎖也會(huì)越多。比方如今要改動(dòng)name字段的值,而包括name字段的索引有2個(gè),那么在改動(dòng)name時(shí),也須要鎖定這2個(gè)索引的頁面和key,所以會(huì)先改動(dòng)表中name字段的值,然后再改動(dòng)涉及到name字段的2個(gè)索引的key值,這個(gè)改動(dòng)操作是先刪除,然后再插入key值,比方,要update 3條記錄,那么最后改動(dòng)索引時(shí),會(huì)申請(qǐng)6個(gè)key 的X鎖,3個(gè)是要?jiǎng)h除的,3個(gè)是要插入的。
只是須要特別注意的是,update語句和select 語句的差別在于,update語句獲取的鎖,直到事務(wù)結(jié)束,才會(huì)釋放。
對(duì)于Insert 語句:
A、數(shù)據(jù)庫S鎖
B、表的IX鎖
C、頁的IX鎖,對(duì)于要新插入數(shù)據(jù)的頁,也會(huì)有一個(gè)IX鎖。
D、RID,對(duì)要新插入的數(shù)據(jù),會(huì)申請(qǐng)一個(gè)X鎖。
E、假設(shè)表中有多個(gè)索引,那么每一個(gè)索引上都要插入一條新的數(shù)據(jù),要插入數(shù)據(jù)所在頁上,會(huì)有一個(gè)IX鎖。
F、要插入索引中的key,也會(huì)有一個(gè)X鎖。
注意:IS、IU(臨時(shí)沒發(fā)如今表級(jí)別上有這個(gè)鎖)、IX這3個(gè)意向鎖,都是在表級(jí)別、頁級(jí)別的,而S、U(
臨時(shí)沒
沒發(fā)如今表級(jí)別有這個(gè)鎖)、X 能夠在多個(gè)級(jí)別上。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
