漫畫:MySQL的鎖世界(排它、共享、記錄、臨鍵、間隙鎖...)
你知道的越多,不知道的就越多,業(yè)余的像一棵小草!
你來,我們一起精進!你不來,我和你的競爭對手一起精進!
編輯:業(yè)余草
cnblogs.com/duck-and-duck
推薦:https://www.xttblog.com/?p=5349
1.飲料
這是一杯飲料。

這是3杯飲料,每杯飲料的味道各不相同。

但是人類并不稱呼飲料為飲料,而是稱呼飲料為記錄。
2.紅章魚
這個紅色的,長的像章魚??的家伙,我們就叫它紅章魚~
紅章魚分為頭部和觸手兩個部分。

紅章魚有觸手,且可以有任意根觸手。

紅章魚愛喝飲料,把觸手伸進杯子就能吸到飲料。

紅章魚將不同的觸手伸進不同的杯子,就可以同時喝多杯飲料。

多只紅章魚可以同時出現(xiàn)。

但是正在喝飲料的紅觸手會排斥其它觸手,即一杯飲料里最多只能有一只紅觸手。
先來先得,后來的觸手要排隊。

同一杯飲料可以有多只紅章魚在「按序」排隊等待。

紅章魚癡迷同時吸吮多杯飲料的感覺,所以它的所有觸手要么全在等待,要么全在喝飲料。也就是說,如果紅章魚的某只觸手在排隊,那么它的其它觸手也必須排隊,即使是沒人喝的飲料也要排隊。

有觸手排隊但是沒觸手伸進去喝的飲料,仍然可以被后來的其它章魚喝。

但是人類并不稱呼紅章魚為紅章魚。人類稱呼紅章魚的頭部為意向排它鎖;人類稱呼正在喝飲料的紅觸手為排它記錄鎖。
3.綠章魚
這些是綠章魚。

綠章魚的絕大多數(shù)特性和紅章魚完全相同,除了一點:綠章魚的觸手愿意跟其它綠色觸手一起分享飲料。

因為紅章魚不會向其它任何顏色的章魚分享飲料,且綠章魚只會向綠章魚分享飲料,所以紅章魚和綠章魚不會同時喝同一杯飲料,后來的要排隊。

根據(jù)以上規(guī)則,紅章魚和綠章魚可以組成很多狀態(tài)。下面就是一種,編號表示他們來的順序。

但是人類并不稱呼綠章魚為綠章魚,人類稱呼綠章魚的頭部為意向共享鎖;
人類稱呼正在喝飲料的綠觸手為共享記錄鎖。
4.空地
事實上,飲料杯未必都是相鄰的,它們之間可能有空地。

無論兩個飲料杯相隔多遠,它們之間如果沒有其它飲料杯,那我們就說這兩個飲料杯之間是同一塊空地。

最左邊的杯子的左邊,最右邊的杯子的右邊,仍然是空地。

對于章魚來說,除了喝飲料的觸手以外,有時候它們會有一些多余的觸手,它們會在喝飲料的時候把多余的觸手放到杯子間的空地上休息。

因為空地上啥都沒有,在空地上的觸手不用搶著喝飲料,所以在空地上紅綠顏色的觸手可以和平共處。

但是人類并不稱呼空地為空地,人類稱呼空地為 記錄間的間隙。
人類也不稱呼那些在空地上的觸手為空地上的觸手,人類稱呼在空地上的觸手為間隙鎖。
如果一只章魚把一只觸手伸進了一杯飲料吮吸,恰巧把另一只觸手放在緊挨該飲料的左邊休息,那么人類會稱呼這兩只觸手為一個臨鍵鎖。
5.黑觸手
這個世界存在另一種紅章魚,這種紅章魚的觸手是黑色的。

黑色的觸手跟紅綠顏色的觸手都不同,黑色的觸手沒辦法吸食飲料。但是黑觸手有一個逆天的功能,就是當黑觸手接觸空地時,在接觸點會憑空生成一杯飲料出來!

因為黑觸手可以創(chuàng)造出章魚愛喝的飲料,所以其它章魚對黑觸手奉若神明,當黑觸手接觸到空地后,其它觸手不會過來打擾。黑觸手只會降落在沒有其它觸手的空地。

一只有黑觸手的紅章魚,可以在同一片空地上放下多只觸手(如果空間足夠)。

也可以在不同的空地同時放下多只觸手。

但是人類并不稱呼落在空地上的黑觸手為落在空地上的黑觸手,人類稱呼落在空地上的黑觸手為意向插入鎖,并且認為它是間隙鎖的一種。
6.激光
下圖是一條紅色的激光,橫在了所有杯子上方。

紅激光十分灼熱,紅章魚和綠章魚碰到紅激光就會被燒傷,所以紅激光存在的時候,章魚們就在上方盤旋不敢下來。另一方面,沒有任何觸手在飲料杯或空地上時,紅激光才有可能出現(xiàn)。

這是綠色的激光。

綠激光比較柔和,綠色的東西能夠無傷的穿過綠激光,所以綠章魚不受綠激光的影響。

事實上,綠激光可以同時出現(xiàn)多條,而紅激光最多出現(xiàn)一條,且紅綠激光不會同時存在。

但是人類不稱呼紅激光為紅激光,人類稱呼紅激光為排它表鎖。人類也不稱呼綠激光為綠激光,而是稱呼綠激光為共享表鎖。
7.參考資料
InnoDB Locking and Transaction Model: https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-transaction-model.html
看完本文有收獲?請轉(zhuǎn)發(fā)分享給更多人!!!
