迷失在Mysql的鎖世界~
1.飲料
這是一杯飲料。

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

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

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

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

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

多只紅章魚可以同時出現。

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

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

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

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

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

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

因為紅章魚不會向其它任何顏色的章魚分享飲料,且綠章魚只會向綠章魚分享飲料,
根據以上規則,紅章魚和綠章魚可以組成很多狀態。下面就是一種,編號表示他們來的順序。

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

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

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

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

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

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

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

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

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

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

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

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

這是綠色的激光。

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

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

但是人類不稱呼【紅激光】為【紅激光】,人類稱呼【紅激光】為【排它表鎖】。
人類也不稱呼【綠激光】為【綠激光】,而是稱呼【綠激光】為【共享表鎖】。
[參考] 15.7 InnoDB Locking and Transaction Model

浙公網安備 33010602011771號