MySQL(5.7)与MariaDB的锁之理解

一:结论

1:普通查詢沒有鎖。

2:查詢可以加共享鎖,如select 。。。 lock in share mode。這樣就加上了共享鎖。

3:查詢可以加排它鎖,如select 。。。 for update。

4:增刪改默認加排它鎖。無需我們顯示指定。

5:行記錄上有排他鎖的時候,也可以被普通查詢查到。但查到的是之前的老數據。

6:若一個查詢中連續加了多個共享鎖,那麼也要等最後一個共享鎖釋放,才能執行排它鎖的操作。(並非同類型的共享鎖都執行完了才執行排他。而是根據FIFO原則執行。見下面的結論)

7:結論6適用於java。

 

二:实验目的/結論

1:共享鎖要被全部釋放以後,才會執行排它鎖。

2:添加與排它鎖之後的共享鎖,要等待排它鎖執行完畢才會執行

 

三:实验步骤

对一张表顺序添加ABCD四把锁(其中ABD为S共享锁,C为X排他锁)。且四把锁都处于未commit状态。语句如下

#ABD锁的执行语句
BEGIN;
select * from tb_test LOCK IN SHARE MODE;
#COMMIT;
#C锁的执行语句
BEGIN;
select * from tb_test FOR UPDATE;
#COMMIT;

1:順序執行ABCD的語句,我們會發現,C和D同處於等待狀態。即使D是與AB對同一條記錄添加了同樣的鎖的操作,但是由於在B和D之間有一個C的排它鎖,因此D也要等待。如下圖

 

 

2:先將B鎖釋放,發現C和D的狀態未改變。再將A鎖釋放。發現C已被執行,但是D仍然等待

 

3:再將C鎖釋放,發現D已被執行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值