mysql中樂觀鎖和悲觀鎖的區別有:1.概念不同;2.使用場景不同;3.實現方式不同;4.特點不同;
mysql中樂觀鎖和悲觀鎖的區別有以下幾點
1.概念不同
mysql中樂觀鎖是對加鎖持有一種樂觀的態度,可以先進行業務操作,不到最后一步不進行加鎖,且樂觀鎖認為加鎖一定會成功;而悲觀鎖是對數據加鎖持有一種悲觀的態度,在數據處理過程中,數據是一直數據處于鎖定狀態,且悲觀鎖需要數據庫提供鎖機制。
2.使用場景不同
mysql中樂觀鎖適用于讀取操作頻繁的場景,當進行頻繁的寫入操作時,為了保證數據的一致性,應用層需要不斷的重新獲取數據,會增加數據庫的查詢操作,從而降低系統的吞吐量;而悲觀鎖適用于寫入操作頻繁的場景,當進行頻繁的讀取操作時,每次讀取操作都會對數據進行加鎖,會增加鎖的開銷,從而降低系統的吞吐量。
3.實現方式不同
mysql中樂觀鎖是通過version方式實現的,是在數據表中加上一個數據版本號version字段,表示數據被修改的次數,當數據被修改時,version值會加一;而悲觀鎖是由數據庫本身實現的,可以直接調用數據庫的相關語句實現悲觀鎖。
4.特點不同
mysql中樂觀鎖的特點是先進行業務操作,不到萬不得已不會進行加鎖操作,且樂觀鎖認為加鎖一定會成功,只需要在完成業務操作后加鎖即可;而悲觀鎖的特點是先獲取鎖,再進行業務操作,因為悲觀鎖認為獲取鎖失敗的可能性很大,它需要先確保獲取鎖成功后再進行業務操作。