日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql乐观和悲观锁实现_mysql实现乐观锁和悲观锁该怎么编写?

發(fā)布時間:2024/10/8 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql乐观和悲观锁实现_mysql实现乐观锁和悲观锁该怎么编写? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

樂觀鎖和悲觀鎖相信大家都是知道的,這是java中的基礎知識,今天我們就來看看它們兩者該如何使用代碼實現(xiàn)吧。

樂觀鎖實現(xiàn)

1)、表設計

表task,分別有三個字段id,value、version

2)、具體實現(xiàn)

-首先讀取task表中的數(shù)據(jù),得到version的值為versionValue

-在每次更新task表value字段時,因為要防止可能發(fā)生的沖突,我們需要這樣操作select?(value,version)?from?task?where?id=#{id}

update?task

set?value=newValue,version=versionValue+?1

whereid=#{id}?and?version=versionValue;

只有當這條語句執(zhí)行成功了,本次更新value字段的值才會表示成功

我們假設有兩個節(jié)點A與B都需要更新task表中的value字段值,在相同時刻,A和B節(jié)點從task表中讀到的version值都為2,那么A節(jié)點和B節(jié)點在更新value字段值的時候,都需要操作

update task set value = newValue,version = 3 where version = 2;

實際上其實只有1個節(jié)點執(zhí)行該SQL語句成功,我們假設A節(jié)點執(zhí)行成功,那么此時task表的version字段的值是3,B節(jié)點再操作update task

set value = newValue,version = 3 where version =

2;這條SQL語句是不執(zhí)行的,這樣就保證了更新task表時不發(fā)生沖突

悲觀鎖實現(xiàn)

數(shù)據(jù)庫中悲觀鎖實現(xiàn),通常都是依靠的數(shù)據(jù)庫鎖機制。悲觀鎖原理:當我們在查詢出goods信息后就把當前的數(shù)據(jù)鎖定,直到我們修改完畢后再解鎖。那么在這個過程中,因為goods被鎖定了,就不會出現(xiàn)有第三者來對其進行修改了。//使用悲觀鎖,我們必須要首先關閉mysql數(shù)據(jù)庫的自動提交屬性

set?autocommit=0;

//設置完autocommit后,我們就可以執(zhí)行我們的正常業(yè)務了。具體如下:

//1.開始事務

start?transaction;

//2.查詢出商品信息

select?status?from?t_goods?where?id=1?for?update;

//3.根據(jù)商品信息生成訂單

insert?into?t_orders?(id,goods_id)?values?(null,1);

//4.修改商品status為2

update?t_goods?set?status=2;

//5.提交事務

commit;

以上就是今天的所有內容了,還想知道更多樂觀鎖與悲觀鎖等常見問題,就請持續(xù)關注本網(wǎng)站吧。

推薦閱讀:

總結

以上是生活随笔為你收集整理的mysql乐观和悲观锁实现_mysql实现乐观锁和悲观锁该怎么编写?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。