91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql樂觀鎖如何實現

發布時間:2022-02-24 11:04:00 來源:億速云 閱讀:356 作者:iii 欄目:MySQL數據庫

這篇文章主要介紹“mysql樂觀鎖如何實現”,在日常操作中,相信很多人在mysql樂觀鎖如何實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”mysql樂觀鎖如何實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在mysql中,可以利用數據版本Version記錄機制實現樂觀鎖,給數據表加一個version字段,每操作一次記錄的版本號加一,判斷version的值是否與剛查詢的值相等,若相等則執行更新,若不相等則不進行更新。

本教程操作環境:windows10系統、mysql8.0.22版本、Dell G3電腦。

mysql樂觀鎖怎么實現

實現方法

1、用數據版本Version記錄機制實現,這是樂觀鎖最常用的一種實現方式。

2、數據版本,即為數據增加一個版本標識,一般是通過為數據庫表增加一個數字類型的 version字段來實現。當讀取數據時,將version字段的值一同讀出,數據每更新一次,對此version值加1。當我們提交更新的時候,判斷數據庫表對應記錄的當前版本信息與第一次取出來的version值進行比對,如果數據庫表當前版本號與第一次取出來的version值相等,則予以更新,否則認為是過期數據。

實例

update TABLE
set value=2,version=version+1
where id=#{id} and version=#{version}

樂觀鎖不是數據庫自帶的,需要我們自己去實現。

樂觀鎖是指操作數據庫時(更新操作),想法很樂觀,認為這次的操作不會導致沖突,在操作數據時,并不進行任何其他的特殊處理(也就是不加鎖),而在進行更新后,再去判斷是否有沖突了。整體思想就是CAS思想。

通常實現是這樣的:在表中的數據進行操作時(更新),先給數據表加一個版本(version)字段,每操作一次,將那條記錄的版本號加1。也就是先查詢出那條記錄,獲取出version字段,如果要對那條記錄進行操作(更新),則先判斷此刻version的值是否與剛剛查詢出來時的version的值相等,如果相等,則說明這段期間,沒有其他程序對其進行操作,則可以執行更新,將version字段的值加1;如果更新時發現此刻的version值與剛剛獲取出來的version的值不相等,則說明這段期間已經有其他程序對其進行操作了,則不進行更新操作。

eg:

下單操作包括3步驟:

1、查詢出庫存信息:

select (id,count,version) from t_goodsku where id=#{id}

2、扣減2個庫存:

程序中計算:count = count - 2;

3、更新庫存:

update t_goodsku
set count={count},version=version+1
where id=#{id} and version=#{version};

第1步中查到的version其實是快照(read-commited和read-repeatable隔離機制下的MVCC機制),在這種情況下,第3步去update時,獲取鎖,where條件中進行判斷中的version=#{version},其實是拿當前version和第1步中的快照version進行比對

如果比對成功,說明在這段時間內這條數據沒有被其他線程更新過,update成功;

如果對比失敗,說明這段時間內這條數據被更新過,那么update失敗,報錯回滾或自旋。

當然,這里是為了模擬樂觀鎖的場景,實際上更新庫存時一步便可以實現:

更新庫存:

update t_goodsku
set count=count -2
where id=#{id};

到此,關于“mysql樂觀鎖如何實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

珠海市| 桐庐县| 澄迈县| 德安县| 木兰县| 德昌县| 大田县| 屏边| 新郑市| 龙井市| 玉门市| 焉耆| 双鸭山市| 湘西| 新干县| 红河县| 石嘴山市| 稷山县| 新绛县| 涞源县| 龙游县| 秦皇岛市| 南丰县| 普兰店市| 泰宁县| 南开区| 达日县| 双牌县| 高唐县| 阿拉善右旗| 昆山市| 巨鹿县| 广安市| 西乌珠穆沁旗| 庆元县| 商南县| 永顺县| 关岭| 肥城市| 于田县| 高阳县|