数据库乐观锁和悲观锁例子和分析
生活随笔
收集整理的這篇文章主要介紹了
数据库乐观锁和悲观锁例子和分析
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.樂(lè)觀(guān)鎖:樂(lè)觀(guān)地認(rèn)為每次讀數(shù)據(jù)別人都不會(huì)修改,所以不需要用數(shù)據(jù)庫(kù)鎖
//查出商店中id=1的商品的版本號(hào)
select version currentVersion from shop where id=1;
//把id=1的商品庫(kù)存減1,并把版本號(hào)自增1
update shop set num = num - 1,version = version + 1 where id=1 and version = currentVersion;2.悲觀(guān)鎖:悲觀(guān)地認(rèn)為每次讀數(shù)據(jù)別人都會(huì)修改,所以要用數(shù)據(jù)庫(kù)鎖
//0.開(kāi)始事務(wù)
begin;
//1.查出商品庫(kù)存
select num from shop where id=1 for update;
//2.將商品庫(kù)存減1
update items set num = num - 1 where id = 1;
//3.提交事務(wù)
commit;
悲觀(guān)鎖用了select for update,在事務(wù)結(jié)束之前其他事務(wù)都不能改id=1的數(shù)據(jù),
如果id用了索引則只鎖行,沒(méi)用索引則會(huì)鎖表。3.數(shù)據(jù)經(jīng)常改,使用悲觀(guān)鎖,能保證數(shù)據(jù)正確地按順序被修改,此時(shí)用樂(lè)觀(guān)鎖則會(huì)發(fā)生很多修改失敗的情況。數(shù)據(jù)不常改,使用樂(lè)觀(guān)鎖,因?yàn)橐牡臄?shù)據(jù)別人基本都不會(huì)改,所以不用使用數(shù)據(jù)庫(kù)鎖那么重,耗性能。
總結(jié)
以上是生活随笔為你收集整理的数据库乐观锁和悲观锁例子和分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux下磁盘sda,Linux下磁盘
- 下一篇: Mariadb数据库