1. 程式人生 > >數據庫的鎖機制

數據庫的鎖機制

pda 我們 共享 size col bubuko 一行 準備 開啟

讀鎖:LOCK in SHARE MODE 寫鎖:for UPDATE

技術分享圖片

行鎖 (鎖住某行數據)

SELECT name FROM t_goods_info where code = ‘huawei‘ for UPDATE;

頁鎖 (鎖住某些數據)

SELECT NAME FROM t_goods_info where code in (‘huawei‘,‘xiaomi‘) for UPDATE;

表鎖 (鎖住整張表)

select name from t_goods_info for update

----------------------------------------------------------------

讀鎖能夠對讀請求共享,寫鎖具有排他性。

(1)當我們對一行數據開啟事務後加讀鎖,我們還能再次加讀鎖;若是加寫鎖就會因為鎖占用而出現等待,只有事務commit後才能加鎖。

  技術分享圖片

(2) 我們對一行數據加寫鎖後,只有事務commit後才能加其他鎖(讀鎖/寫鎖)。

  技術分享圖片

死鎖:

 T1: select * from table (加共享鎖)
       update table set column1=‘hello‘
T2: select * from table (加共享鎖)
       update table set column1=‘hello‘

運行過程: T1  select完就發生了死鎖,程序停止了。

原理:T1先到達執行select加共享鎖,然後T2執行select加共享鎖;
         T1 select執行完之後準備update,此時T2木有釋放鎖,所以
         T1無法執行,這樣T1沒有執行完,T2也無法執行。

樂觀鎖和悲觀鎖:

   技術分享圖片

數據庫的鎖機制