資料庫樂觀鎖和悲觀鎖例子和分析

2021-10-23 04:35:04 字數 703 閱讀 2512

1.樂觀鎖:樂觀地認為每次讀資料別人都不會修改,所以不需要用資料庫鎖

//查出商店中id=1的商品的版本號

select version currentversion from shop where id=1;

//把id=1的商品庫存減1,並把版本號自增1

update shop set num = num - 1,version = version + 1 where id=1 and version = currentversion;

2.悲觀鎖:悲觀地認為每次讀資料別人都會修改,所以要用資料庫鎖

//0.開始事務

begin;

//1.查出商品庫存

select num from shop where id=1 for update;

//2.將商品庫存減1

update items set num = num - 1 where id = 1;

//3.提交事務

commit;

悲觀鎖用了select for update,在事務結束之前其他事務都不能改id=1的資料,

如果id用了索引則只鎖行,沒用索引則會鎖表。

3.資料經常改,使用悲觀鎖,能保證資料正確地按順序被修改,此時用樂觀鎖則會發生很多修改失敗的情況。

資料不常改,使用樂觀鎖,因為要改的資料別人基本都不會改,所以不用使用資料庫鎖那麼重,耗效能。

資料庫 (2)樂觀鎖和悲觀鎖

併發控制手段 樂觀鎖 樂觀併發控制 悲觀鎖 悲觀併發控制 悲觀鎖 當我們要對乙個資料庫中的一條資料進行修改的時候,為了避免同時被其他人修改,最好的辦法就是對該資料進行加鎖以防止併發。這種借助資料庫鎖機制在修改資料之前先鎖定,再修改的方式稱之為悲觀併發控制。悲觀併發控制實際上是 先取鎖再訪問的保守策略...

資料庫的樂觀鎖和悲觀鎖

悲觀鎖 假定會發生併發衝突,遮蔽一切可能違反資料完整性的操作,假設資料肯定會衝突,所以在資料開始讀取的時候就把資料鎖定住。資料鎖定 資料將暫時不會得到修改 樂觀鎖 假設不會發生併發衝突,只在提交操作時檢查是否違反資料完整性。資料進行提交更新的時候,才會正式對資料的衝突與否進行檢測,如果發現衝突了,則...

樂觀鎖和悲觀鎖

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