數據庫的鎖機制
阿新 • • 發佈:2018-11-22
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也無法執行。
樂觀鎖和悲觀鎖:
數據庫的鎖機制