成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 簡單了解 MySQL 中相關的鎖

簡單了解 MySQL 中相關的鎖

熱門標簽:html地圖標注并導航 北京金倫外呼系統(tǒng) 400電話變更申請 400電話辦理服務價格最實惠 大豐地圖標注app 南太平洋地圖標注 呂梁外呼系統(tǒng) 武漢電銷機器人電話 催天下外呼系統(tǒng)

本文主要是帶大家快速了解 InnoDB 中鎖相關的知識

基礎概念解析和RocketMQ詳細的源碼解析

http://xiazai.jb51.net/202105/yuanma/RocketMQ_jb51.rar

為什么需要加鎖

首先,為什么要加鎖?我想我不用多說了,想象接下來的場景你就能 GET 了。

你在商場的衛(wèi)生間上廁所,此時你一定會做的操作是啥?鎖門。如果不鎖門,上廁所上著上著,啪一下門就被打開了,可能大概也許似乎貌似有那么一丁點的不太合適。

數據也是一樣,在并發(fā)的場景下,如果不對數據加鎖,會直接破壞數據的一致性,并且如果你的業(yè)務涉及到錢,那后果就更嚴重了。

鎖門表情包

鎖的分類

在 InnoDB 中,都有哪些鎖?其實你應該已經知道了很多了,例如面試中會問你存儲引擎 MyISAM 和 InnoDB 的區(qū)別,你會說 MyIASM 只有表鎖,但是 InnoDB 同時支持行鎖和表鎖。你可能還會被問到樂觀鎖和悲觀鎖的區(qū)別是啥。

鎖的概念、名詞很多,如果你沒有對鎖構建出一個完整的世界觀,那么你理解起來就會比較有阻礙,接下來我們把這些鎖給分一下類。

按照鎖的粒度

按照鎖的粒度進行劃分可以分為:

  • 表鎖
  • 行鎖

這里就不討論頁鎖了,頁鎖是 BDB(BerkeleyDB) 存儲引擎中才有的概念,我們這里主要討論 InnoDB 存儲引擎。

按照鎖的思想

按照加鎖的思想可以分為:

  • 悲觀鎖
  • 樂觀鎖

這里的悲觀、樂觀和你平時理解的名詞是同一個意思。樂觀鎖認為大概率不會發(fā)生沖突,只在必要的時候加鎖。而悲觀鎖認為大概率會沖突,所以無論是否必要加鎖都會執(zhí)行加鎖操作。

按照兼容性

按照兼容性可以把鎖劃分為:

  • 共享鎖
  • 排他鎖

被加上共享鎖的資源,能夠和其他人進行共享,而如果被加上了排他鎖,其他人在拿不到這把鎖的情況下是無法進行任何操作的。

按照鎖的實現

這里的實現就是 InnoDB 中具體的鎖的種類了,分別有:

  • 意向鎖(Intention Locks)
  • 記錄鎖(Record Locks)
  • 間隙鎖(Gap Locks)
  • 臨鍵鎖(Next-Key Locks)
  • 插入意向鎖(Insert Intention Locks)
  • 自增鎖(AUTO-INC Locks)

即使按照這種分類來對鎖進行了劃分,看到了這么多的鎖的名詞可能仍然會有點懵。比如我SELECT ... FOR UPDATE 的時候到底加的是什么鎖?

我們應該透過現象看本質,本質是什么?本質是鎖到底加在了什么對象上,而這個很好回答:

  • 加在了表上
  • 加在了行上

而對于加在行上的鎖,其本質又是什么?本質是將鎖加在了索引上。

意向鎖

在 InnoDB 中支持了不同粒度的鎖,行鎖和表鎖。例如lock tables命令就會持有對應表的排他鎖。為了使多種不同粒度的鎖更實用,InnoDB 設計了意向鎖。

意向鎖是一種表級鎖,它表明了接下來的事務中,會使用哪種類型的鎖,它有以下兩種類型:

  • 共享意向鎖(IS) 表明該事務會打算對表中的記錄加共享鎖
  • 獨占意向鎖(IX) 則是加排他鎖

例如,select ... for share就是加的共享意向鎖,而SELECT .. FOR UPDATE則是加的獨占意向鎖。其規(guī)則如下:

  • 一個事務如果想要獲取某張表中某行的共享鎖,它必須先獲取該表的共享意向鎖,或者獨占意向鎖。
  • 同理,如果想獲取排他鎖,它必須先獲取獨占意向鎖

下圖是這幾種鎖的組合下相互互斥、兼容的情況

對照上面的表,在相互兼容的情況下,對應的事務就能獲取鎖,但是如果不兼容則無法獲取鎖,直到不兼容的鎖釋放之后才能獲取。

看到這里你可能就會有問題了,那既然意向鎖除了 LOCK TBALES 之外什么都不阻塞。那我要它何用?

還是通過例子,假設事務 A 獲取了 student 表中 id = 100 這行的共享鎖,之后事務 B 需要申請 student 表的排他鎖。而這兩把鎖明顯是沖突的,而且還是對于同一行。

那 InnoDB 需要如何感知 A 獲取了這把鎖?遍歷整個 B+ 樹嗎?不,答案就是意向鎖。事務 B 申請寫表的排他鎖時,InnoDB 會發(fā)現事務 A 已經獲取了該表的意向共享鎖,說明 student 表中已經有記錄被共享鎖鎖住了。此時就會阻塞住。

并且,意向鎖除了像LOCK TABLES這種操作之外,不會阻塞其他任何操作。換句話說,意向鎖只會和表級別的鎖之間發(fā)生沖突,而不會和行級鎖發(fā)生沖突。因為意向鎖的主要目的是為了表明有人即將、或者正在鎖定某一行。

就像你去圖書館找書,你并不需要每個書架挨著挨著找,直接去服務臺用電腦一搜,就知道圖書館有沒有這本書。

記錄鎖

這就是記錄鎖,是行鎖的一種。記錄鎖的鎖定對象是對應那行數據所對應的索引。對索引不太清楚的可以看看這篇文章。

當我們執(zhí)行SELECT * FROM student WHERE id = 1 FOR UPDATE語句時,就會對值為1的索引加上記錄鎖。至于要是一張表里沒有索引該怎么辦?這個問題在上面提到的文章中也解釋過了,當一張表沒有定義主鍵時,InnoDB 會創(chuàng)建一個隱藏的RowID,并以此 RowID 來創(chuàng)建聚簇索引。后續(xù)的記錄鎖也會加到這個隱藏的聚簇索引上。

當我們開啟一個事務去更新 id = 1 這行數據時,如果我們不馬上提交事務,然后再啟一個事務去更新 id = 1 的行,此時使用 show engine innodb status查看,我們可以看到lock_mode X locks rec but not gap waiting的字樣。

X是排他鎖的意思,從這可以看出來,記錄鎖其實也可以分為共享鎖、排他鎖模式。當我們使用FOR UPDATE是排他,而使用LOCK IN SHARE MODE 則是共享。

而在上面字樣中出現的 gap 就是另一種行鎖的實現間隙鎖。

間隙鎖

對于間隙鎖(Gap Locks)而言,其鎖定的對象也是索引。為了更好的了解間隙鎖,我們舉個例子。

SELECT name FROM student WHERE age BETWEEN 18 AND 25 FOR UPDATE

假設我們?yōu)?age 建立了非聚簇索引,運行該語句會阻止其他事務向 student 表中新增 18-25 的數據,無論表中是否真的有 age 為 18-25 的數據。因為間隙鎖的本質是鎖住了索引上的一個范圍,而 InnoDB 中索引在底層的B+樹上的存儲是有序的。

再舉個例子:

SELECT * FROM student WHERE age = 10 FOR UPDATE;

值得注意的是,這里的 age 不是唯一索引,就是一個簡單的非聚簇索引。此時會給 age = 10 的數據加上記錄鎖,并且鎖定 age 10 的 Gap。如果當前這個事務不提交,其他事務如果要插入一條 age 10 的數據時,會被阻塞住。

間隙鎖是 MySQL 在對性能、并發(fā)綜合考慮之下的一種折中的解決方案,并且只在**可重復讀(RR)下可用,如果當前事務的隔離級別為讀已提交(RC)**時,MySQL會將間隙鎖禁用。

剛剛說了,記錄鎖分為共享、排他,間隙鎖其實也一樣。但是不同于記錄鎖的一點,共享間隙鎖、排他間隙鎖相互不互斥,這是怎么回事?

我們還是需要透過現象看到本質,間隙鎖的目的是什么?

為了防止其他事務在 Gap 中插入數據

那共享、排他間隙鎖在這個目標上是一致的,所以是可以同時存在的。

臨鍵鎖

臨鍵鎖(Next-Key Locks)是 InnoDB 最后一種行鎖的實現,臨鍵鎖實際上是記錄鎖和間隙鎖的組合。換句話說,臨鍵鎖會給對應的索引加上記錄鎖,并且外加鎖定一個區(qū)間。

但是并不是所有臨鍵鎖都是這么玩的,對于下面的SQL:

SELECT * FROM student WHERE id = 23;

在這種情況下,id是主鍵,唯一索引,無論其他事務插入了多少數據,id = 23這條數據永遠也只有一條。此時再加一個間隙鎖就完全沒有必要了,反而會降低并發(fā)。所以,在使用的索引是唯一索引的時候,臨鍵鎖會降級為記錄鎖。

假設我們有10,20,30總共3條索引數據。那么對應臨鍵鎖來說,可能鎖定的區(qū)間就會如下:

  • (∞, 10]
  • (10, 20]
  • (20, 30]
  • (30, ∞)

InnoDB 的默認事務隔離級別為可重復讀(RR),在這個情況下,InnoDB 就會使用臨鍵鎖,以防止幻讀的出現。

簡單解釋一下幻讀,就是在事務內,你執(zhí)行了兩次查詢,第一次查詢出來 5 條數據,但是第二次再查,居然查出了 7 條數據,這就是幻讀。

可能你在之前的很多博客,或者面試八股文上,了解到過 InnoDB 的RR事務隔離級別可以防止幻讀,RR防止幻讀的關鍵就是臨鍵鎖。

舉個例子,假設 student 表中就兩行數據,id分別為90和110.

SELECT * FROM student WHERE id > 100 FOR UPDATE;

當執(zhí)行該 SQL 語句之后,InnoDB就會給區(qū)間 (90, 110] 和(110,∞) 加上間隙鎖,同時給 id=110 的索引加上記錄鎖。這樣以來,其他事務就無法向這個區(qū)間內新增數據,即使 100 根本不存在。

插入意向鎖

接下來是插入意向鎖(Insert Intention Locks),當我們執(zhí)行 INSERT 語句之前會加的鎖。本質上是間隙鎖的一種。

還是舉個例子,假設我們現在有索引記錄10、20,事務A、B分別插入索引值為14、16的數據,此時事務A和B都會用插入意向鎖鎖住 10-20 之間的 Gap,獲取了插入意向鎖之后就會獲取14、16的排他鎖。

此時事務A和B是不會相互阻塞的,因為他們插入的是不同的行。

自增鎖

最后是自增鎖(AUTO-INC Locks),自增鎖的本質是表鎖,較為特殊。當事務 A 向包含了 AUTO_INCREMENT 列的表中新增數據時,就會持有自增鎖。而此時其他的事務 B 則必須要等待,以保證事務 A 取得連續(xù)的自增值,中間不會有斷層。

好了,通過下面鏈接獲取MQ學習資料,包含基礎概念解析和RocketMQ詳細的源碼解析,持續(xù)更新中,大家一定不要錯過這份學習資料哦。

http://xiazai.jb51.net/202105/yuanma/RocketMQ_jb51.rar (必收藏)

以上就是簡單了解 MySQL 中相關的鎖的詳細內容,更多關于MySQL鎖相關的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 由不同的索引更新解決MySQL死鎖套路
  • 通過唯一索引S鎖與X鎖來了解MySQL死鎖套路
  • 一個mysql死鎖場景實例分析
  • 詳解MySQL(InnoDB)是如何處理死鎖的
  • 實例講解MySQL中樂觀鎖和悲觀鎖
  • Mysql查詢正在執(zhí)行的事務以及等待鎖的操作方式

標簽:迪慶 龍巖 南充 無錫 徐州 自貢 麗水 西寧

巨人網絡通訊聲明:本文標題《簡單了解 MySQL 中相關的鎖》,本文關鍵詞  簡單,了解,MySQL,中,相關,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《簡單了解 MySQL 中相關的鎖》相關的同類信息!
  • 本頁收集關于簡單了解 MySQL 中相關的鎖的相關信息資訊供網民參考!
  • 推薦文章
    视频免费观看| 日韩欧美国产1| 亚洲乱码国产乱码精品精可以看| 久久国产柳州莫菁门| 日韩中文字幕组| 一区二区三区一级片| 国产无遮挡一区二区三区毛片日本| 国产亚洲美女精品久久久| 四虎国产精品永久地址998| 国产精品一区二区免费视频| 久久久久久毛片| 久久午夜免费视频| 欧美日韩xxx| 91精品天堂福利在线观看| 黄色日韩网站| 性欧美1819sex性高清大胸| 国产男女爽爽爽| 久久久久久久久久久免费| 亚洲欧美日韩专区| 中文字幕亚洲一区二区三区| 黄色春季福利在线看| 无码国产精品一区二区高潮| 久久99这里只有精品| 亚洲激情第一页| 欧美一级国产精品| 中文字幕超清在线免费观看| 中文字幕 自拍偷拍| 一区二区三区免费观看| 亚洲国产高清在线| 黑人巨大精品| 国产精品久久久久影院亚瑟| 国产999久久久| 免费污视频在线| 91丝袜脚交足在线播放| 国产在线看片| 国内精品第一页| 黄色a级在线观看| 91精品国产一区二区| 欧美性受xxxx黑人xyx| 老司机午夜免费精品视频| 久久www免费人成精品| 狼人精品一区二区三区在线| 亚洲人成亚洲人成在线观看| 91白丝在线| 久草免费在线色站| 欧美喷水一区二区| 四虎电影院在线观看| 草草在线观看| jlzzjizz在线播放观看| 精品av一区二区| 亚洲欧美日韩一区| 777永久免费网站国产| www.国产在线视频| 日本成a人片在线观看| 五月天久久久久久| 91.com在线观看| 欧美顶级少妇做爰| 91视频一区二区三区| 日韩a一级欧美一级| 男人的天堂久久精品| 欧美亚洲不卡| 91福利在线观看| 国产一区二区影视| 四季av一区二区| 香蕉视频免费在线看| 久久九九热re6这里有精品| 18成人免费观看网站下载| 黄色一级免费大片| 久久综合九色综合97婷婷女人| 免费看黄色a级片| 久久久国产综合精品女国产盗摄| 一本色道久久综合亚洲精品图片| 在线观看的网站你懂的| 密臀av在线播放| 欧美成人资源| 国产一级不卡毛片| 中文字幕色av一区二区三区| 人人爱人人干婷婷丁香亚洲| 日本午夜精品一区二区| 欧洲av在线精品| 精品国产青草久久久久96| 日本精品免费观看高清观看| 99久久夜色精品国产亚洲| 亚洲午夜剧场| 日韩高清人体午夜| 天天精品视频| 国产日本视频| 欧美天天综合网| 欧美成人福利| 亚洲精品www久久久| 欧美日夜夜逼| 成片免费观看视频| 欧美伦理片在线看| 国产av无码专区亚洲av麻豆| 日本在线观看大片免费视频| 4444kk在线观看| 99riav国产精品视频| 日本一区二区免费看| 欧美激情一区在线观看| 久久成人国产精品| 欧美18一19xxx性| 天天干夜夜干| 青青成人在线| 亚洲欧美在线观看| 性生活一级大片| 黑人操亚洲女人| 无码国产精品一区二区免费式直播| 天堂亚洲精品| 国产乱色精品成人免费视频| 孩娇小videos精品| 中文字幕人妻一区二区| 11024精品一区二区三区日韩| 91福利在线免费观看| 狠狠色噜噜狠狠| 欧美亚洲午夜视频在线观看| 一区二区不卡久久精品| 亚洲 国产 欧美 日韩| aaa日本高清在线播放免费观看| 欧美一区二区三区四区久久| 91成人短视频| 亚洲精品911| 无码无遮挡又大又爽又黄的视频| 这里是久久伊人| 欧美精品色图| 免费看片91| 91九色最新地址| 久久精品无码一区| a视频在线播放| 亚洲精品亚洲人成人网在线播放| 一区二区视频| 日韩精品中文字幕一区二区三区| 国产宾馆实践打屁股91| 侵犯稚嫩小箩莉h文系列小说| 免费人成在线观看| 亚洲午夜久久久| 五月婷婷亚洲综合| 97欧洲一区二区精品免费| 亚洲va欧美va人人爽| 日本毛片在线观看| 手机在线免费毛片| 国模精品视频| 亚洲二区在线播放视频| 不卡视频在线播放| 久久久无码中文字幕久...| 777奇米四色成人影色区| eeuss国产一区二区三区| 亚洲综合在线做性| www.av在线.com| 日韩亚洲欧美高清| 国产欧美日韩不卡| 欧美丰满美乳xxⅹ高潮www| 人人超在线公开视频| 自拍偷拍福利视频| 日韩片在线观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 成人性生活视频| 黄色小视频免费网站| 视频一区二区在线播放| 日本在线观看视频| 91视视频在线观看入口直接观看www| 亚洲欧美综合久久久| 米奇精品一区二区三区| 99久久久国产精品| 欧美日韩精品一区二区三区蜜桃| 日本高清一区二区视频| 精品无码久久久久成人漫画| 在线免费观看a级片| 91po在线观看91精品国产性色| 亚洲va欧美va人人爽| 中文字幕免费高| 91精品久久久久久久久99蜜臂| 春意影院免费入口| 亚洲色图色老头| 亚洲va欧美va国产综合久久| 国产精品亚洲一区二区三区在线观看| √天堂中文www官网| 在线观看精品视频一区二区三区| 老司机免费视频一区二区| 少妇精品无码一区二区| 大杳蕉精品视频在线观看| 国产对白在线正在播放| 国产欧美va欧美va香蕉在线| free性护士videos欧美| 日韩视频一区| 久久精品aⅴ无码中文字字幕重口| 午夜网站在线观看| 精精国产xxxx视频在线中文版| 国产精品一区二区人人爽| 日韩精品二区| 好吊日在线视频| 亚洲韩国精品一区| 国产伪娘ts一区| 欧美日韩二区三区| 欧美黄色大片在线观看| www.桃色av嫩草.com| 日韩影院一区| 亚洲精品在线国产| 成人91在线| 蜜桃久久av| 四虎精品成人免费网站| 欧美18hd| 国产专区一区二区三区| 91精品久久久| 操bbb操bbb| 成熟了的熟妇毛茸茸| 国产精品资源网站| 国产小视频你懂的| 亚洲最大成人在线视频| 2020国产精品| 日本一区二区乱| 国产精品无码一区二区三| 91小视频免费观看| 亚洲免费在线观看| 成人福利网址| 欧美亚洲视频在线观看| 免费av成人在线| 影视先锋av资源站| 亚洲福利视频网站| 亚洲精品一区在线观看香蕉| 污视频在线看网站| 亚洲成人激情自拍| 天堂在线视频免费| 欧美日韩一区二区在线免费观看| www.97| 少妇久久久久久久| 久久精品成人av| 国精产品乱码一区一区三区四区| 国产丝袜一区二区| 久久久久久久久久久久久久久99| 国产一区二区三区香蕉| 日本一区二区三区四区五区六区| heyzo国产| 国产精品www网站| 日韩中文在线中文网在线观看| 能直接看的av| 曰韩精品一区二区| www.四虎网站| 国产成人精品午夜视频免费| 精品国产乱码久久久久| 亚洲国产精品电影| 男女精品网站| 国产一区二区女内射| 亚洲无人区码一码二码三码| 97久久人人超碰caoprom欧美| 不卡专区在线| 玖玖在线视频| 久久午夜免费视频| 亚洲精品乱码久久久久久黑人| 国产成人福利av| 在线观看精品一区| 国产人妻人伦精品| 欧美极品少妇全裸体| 亚洲美女爱爱视频| 国产伦理精品| 日韩精品一区三区| 青青a在线精品免费观看| 久久一日本道色综合久久| 美女国产精品久久久| 水莓100在线视频| 国产精品欧美日韩久久| 波多野结衣片子| 欧美三日本三级少妇三99| 色综合久久久久网| 日韩免费不卡视频| 一区二区三区四区五区视频在线观看| 亚洲国产日韩一级| 免费一级做a爰片久久毛片潮| 成人小视频在线看| 国产精品久久久久久福利| 免费观看的av网站| 久操免费在线| 欧美日韩日日夜夜| 亚洲色图综合久久| 亚洲成a人片77777老司机| 九九国产精品视频| 亚洲黄网在线观看| www.一区| 日韩视频在线观看| 91视频成人| 亚洲成a人片在线www| 久久久一本精品99久久精品66| 狼人精品一区二区三区在线| 一区二区三区国产好的精华液| 日韩欧美一区二区三区久久婷婷| 久久久综合免费视频| 国产在线观看91精品一区| 欧美日韩精品高清| 成人永久免费视频| 国产在线二区| 九色蝌蚪av新入口| 日韩欧美999| 91污片在线观看| 国产精品成久久久久三级| 奇米网一区二区| 在线免费国产| 成人三级视频在线观看一区二区| 国产乱在线观看完整版视频| 天天夜夜人人| 天堂网在线资源| 色婷婷综合久久久久中文字幕1| 欧美日韩亚洲丝袜制服| 欧美精品亚州精品| 亚洲色图图片| 日批免费观看视频| 在线观看日本视频| 91精品国产高清久久久久久| 成人xxx免费视频播放| 午夜两性免费视频| 色屁屁草草影院ccyy.com| 黄色一区二区视频| 日韩欧美国产综合在线一区二区三区| 4438全国亚洲精品观看视频| 成人亚洲激情网| 国产成人三级一区二区在线观看一| 午夜视频在线观看国产| 99久久久精品免费观看国产蜜| 粉嫩av懂色av蜜臀av分享| 永久免费观看片现看| 欧美xxbbb1手交| 久久国产精品亚洲人一区二区三区| 99久久视频| 久久99精品视频一区97| 老司机精品视频一区二区| 国产女同91疯狂高潮互磨| 国产成人精品免费一区二区| 看黄色录像一级片| 欧美一级性视频| 亚洲精品一级二级三级|