樂觀鎖,悲觀鎖實現步驟

2021-10-23 09:12:22 字數 801 閱讀 2572

1:樂觀鎖:(行級)

定義:樂觀鎖通過**實現和資料庫無關

樂觀鎖認為本次操作不會導致衝突,所以不進行任何其他特殊處理,在更新後【如果衝突,更新不會成功,如果不衝突,則更新成功】再去判斷是否衝突

實現:1:查詢需要修改的資料條目【select欄位:需修改欄位和當前版本號;where條件:唯一值】

2:執行程式,修改當前條目【update欄位:更新資料,版本號加1;where條件:唯一值,版本號=查詢出版本號】

引擎:所有引擎

2:悲觀鎖:

定義:悲觀鎖由資料庫自己實現;悲觀鎖認為本次操作會出現資料衝突,所以每次操作都要獲取鎖再進行對資料的操作(相對需要耗費較多時間)

實現:共享鎖,排它鎖

注:如果where條件是主鍵則是行級鎖,如果不是主鍵則是表級鎖

共享鎖:可多事務或非事務同時查詢當前資料【如果有乙個事務在查詢後,執行了增刪改語句,則資料鎖定(自動追加排它鎖),不再允許其他事務查詢,直到事務結束為止】

實現:1:開啟事務

2:在查詢語句後加【lock in share mode】

3:事務完成

引擎:僅支援innodb引擎

排它鎖:只能由乙個事務操作當前資料【加鎖後,其他事務無法實現以下操作(行級鎖:刪改查操作,表級鎖:增刪改查)】

實現:1:開啟事務

2:在查詢語句後加for update

3:邏輯處理

4:事務完成

引擎:innodb引擎

開啟事務:start transaction;

提交事務:commit;

撤銷事務:rollback;

悲觀鎖樂觀鎖

1 悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無...

樂觀鎖 悲觀鎖

悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...

樂觀鎖 悲觀鎖

樂觀鎖 悲觀鎖 悲觀鎖 pessimistic locking 悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保...