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