真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MYSQL關(guān)于鎖的類(lèi)型和模式的討論

本篇內(nèi)容介紹了“MySQL關(guān)于鎖的類(lèi)型和模式的討論”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)從事網(wǎng)站制作、成都網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司。作為專(zhuān)業(yè)網(wǎng)站設(shè)計(jì)公司,成都創(chuàng)新互聯(lián)公司依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專(zhuān)業(yè)的成都網(wǎng)站建設(shè)、成都全網(wǎng)營(yíng)銷(xiāo)及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!

一種數(shù)據(jù)庫(kù)中有很多種鎖,一般說(shuō)起鎖都是在提,是表鎖,還是行鎖,有沒(méi)有死鎖。但實(shí)際上就算是MYSQL 的鎖的種類(lèi)也不是那么簡(jiǎn)單。

實(shí)際上討論一個(gè)鎖,需要從以下幾個(gè)方面來(lái)考慮

1  鎖的種類(lèi)   表鎖  行鎖

2  加鎖的模式    

      LOCK_IS  
      LOCK_IX  
      LOCK_S  
      LOCK_X  
      LOCK_AUTO_INC

3  鎖的類(lèi)型     

4  鎖的粒度

5  鎖所處的隔離級(jí)別

NEXT KEY LOCK   
LOCK_GAP   
LOCK_REC_NOT_GAP   

LOCK_INSERT_INTENTION 

在知道這些東西后,才能更好的理解鎖及其可能產(chǎn)生的各種死鎖或鎖超時(shí)的情況。

下面畫(huà)了一個(gè)圖,圖中是MYSQL 中提供的鎖的類(lèi)型從圖中可以看到 IS意向鎖可以和除X鎖的其他鎖類(lèi)型共存, X 鎖則是和任何鎖都是互斥的,和他本身也是一樣,AI 鎖 只和意向鎖共存。

MYSQL關(guān)于鎖的類(lèi)型和模式的討論

AUTO_INC 鎖又叫自增鎖(一般簡(jiǎn)寫(xiě)成 AI 鎖),它是一種特殊類(lèi)型的表鎖,當(dāng)插入的表中有自增列(AUTO_INCREMENT)的時(shí)候可能會(huì)遇到。當(dāng)插入表中有自增列時(shí),數(shù)據(jù)庫(kù)需要自動(dòng)生成自增值,在生成之前,它會(huì)先為該表加 AUTO_INC 表鎖,其他事務(wù)的插入操作阻塞,這樣保證生成的自增值肯定是唯一的。

  • AUTO_INC 鎖互不兼容,同一張表一個(gè)時(shí)刻只能有一個(gè)自增鎖

  • 自增鎖不遵循二段鎖協(xié)議,不是事務(wù)over時(shí)release,在 INSERT 語(yǔ)句執(zhí)行完成時(shí)釋放,用以提高并發(fā)插入的性能。

  • 自增值一旦分配了就會(huì) +1,如果事務(wù)回滾,自增值也不會(huì)減回去,所以自增值可能會(huì)出現(xiàn)中斷的情況。

而我們熟悉的行鎖

LOCK_REC_NOT_GAP   ,record 鎖本身是沒(méi)有那么復(fù)雜的,他僅僅對(duì)他所在的記錄進(jìn)行一個(gè)鎖,而相關(guān)的鎖,僅僅是鎖在索引上邊的,如果是primary key 則直接鎖在主鍵的位置,如果是二級(jí)索引,則除了鎖在二級(jí)索引上,同時(shí)還需要鎖在二級(jí)索引所指定的主鍵上。

NEXT KEY LOCK  next key lock,顧名思義  要不是  ( ]   [ )  ,(一個(gè)集合的概念),他主要的作用是防止幻讀,也就是兩次讀不一致的情況,所以LOCK_GAP 主要是要看所處的

隔離級(jí)別是R R  ,  RC  那兩種,MYSQL 默認(rèn)的隔離級(jí)別是  RR ,但一般來(lái)說(shuō)強(qiáng)烈建議 MYSQL 的通用的使用的隔離級(jí)別是  RC 。如果我們的隔離級(jí)別是RC 級(jí)別的情況下是不會(huì)有  next key lock 這樣的鎖。NEXT KEY LOCK 鎖會(huì)將鎖定記錄周?chē)挠涗浺策M(jìn)行一個(gè)鎖定。

舉例:如果我們的數(shù)據(jù)表中 的數(shù)據(jù)記錄是   1   6  7 8 9  10 

select  * from t where number = 6 for update

此時(shí)鎖定的記錄

(1 6 7),此時(shí)如果在 1和 6之間插入數(shù)據(jù)會(huì)無(wú)法插入

GAP LOCK 間隙鎖,間隙鎖的知名度比 NEXT KEY LOCK 要大的的

(),標(biāo)識(shí)間隙鎖,間隙鎖本來(lái)也可以理解成為范圍鎖,他將防止其他事務(wù)在這個(gè)范圍內(nèi)插入或修改記錄,保證兩次讀取這個(gè)范圍內(nèi)的記錄不會(huì)變,從而不會(huì)出現(xiàn)幻讀現(xiàn)象。添加間隙鎖和間隙鎖之間是不沖突的,而添加間隙鎖會(huì)嚴(yán)重影響數(shù)據(jù)庫(kù)的并發(fā)性,還以上面的例子來(lái)說(shuō),他是要鎖定 1(23456)7 ,同時(shí)不同的事務(wù)可以在間隙上持有沖突鎖。例如,事務(wù)A可以在一個(gè)gap上持有一個(gè)共享的gap鎖(gap S-lock),而事務(wù)B在同一個(gè)gap上持有一個(gè)獨(dú)占的gap鎖(gap X-lock)。允許存在沖突的間隙鎖的原因是,如果從索引中清除一條記錄,則必須合并不同事務(wù)在記錄中持有的間隙鎖。

LOCK_INSERT_INTENTION 插入意向鎖,主要是服務(wù)于插入服務(wù)的,在數(shù)據(jù)庫(kù)插入的時(shí)候會(huì)診斷插入數(shù)據(jù)的位置是否有間隙鎖,也就是和間隙鎖next key lock 這樣的鎖互斥。

記錄鎖和記錄鎖沖突,Next-key 鎖和 Next-key 鎖沖突,記錄鎖和 Next-key 鎖沖突;

舉例我們現(xiàn)在有下面一張表

MYSQL關(guān)于鎖的類(lèi)型和模式的討論

我們模擬兩個(gè)SESSION 

1  select * from insert_lock where id <= 5 for update

2  insert into insert_lock (id,name,employee_number) values (4,'rty',12)

MYSQL關(guān)于鎖的類(lèi)型和模式的討論

上邊的圖中可以清晰的看到  select 的查詢中包含了 GAP 鎖,所以GAP 鎖導(dǎo)致 插入失敗。

“MYSQL關(guān)于鎖的類(lèi)型和模式的討論”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


分享文章:MYSQL關(guān)于鎖的類(lèi)型和模式的討論
網(wǎng)站網(wǎng)址:http://weahome.cn/article/jdgpgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部