1. 背景
學習、工作用了不少數據庫寫sql還是不成問題。
在解決數據庫並發沖突時,更多的是在程序編程邏輯中加鎖,來解決業務中可能的數據庫並發更新問題。
並不是使用數據庫或者ORM框架來處理並發沖突。悲觀鎖、樂觀鎖 是一種解決數據庫並發的思路。
2. 悲觀鎖與樂觀鎖介紹
悲觀鎖:持"悲觀態度",假設會發現並發更新沖突,屏蔽一切可能違反數據完整性的操作。在更新操作時,先進行加鎖(使用數據庫提供的鎖機制)來從底層保證數據的正確性。
樂觀鎖:持"樂觀態度",假設多事務在處理時不會彼此相互影響。各事務在不產生鎖的情況下處理各自影響的數據,在提交數據更新之前,每個事務先檢查該事務更改數據后,有沒有其他事務又修改了該數據。如果其他事務有更新的話,正在提交的事務會進行回滾。返回錯誤信息,用於可以自行處理。
悲觀鎖適用於更新操作出現並發更新數據多的情況,可以防止數據丟失、臟讀。樂觀鎖,反之。