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.數據經常改,使用悲觀鎖,能保證數據正確地按順序被修改,此時用樂觀鎖則會發生很多修改失敗的情況。 數據不常改,使用樂觀鎖,因爲要改的數據別人基本都不會改,所以不用使用數據庫鎖那麼重,耗性能。
數據庫樂觀鎖和悲觀鎖例子和分析
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.