中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Mysql數據庫中的事務并發如何解決

發布時間:2020-11-10 17:03:13 來源:億速云 閱讀:191 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關Mysql事務并發然后就解決,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

在開發中遇到過這樣一個問題

一個看視頻記錄,更新到100就表示看完了,后面再有請求不繼續更新了.

結果是:

Mysql數據庫中的事務并發如何解決

導致,里面很多數據出現問題.

推測是以下的情況才會導致

第一條請求 事務在執行中,還未提交(因為本地有時候比較難再現,于是手動在程序中,第一條記錄處理的時候,sleep了幾秒,就達到這種效果了)

第二條請求 事務已經開始執行,這個時候查到的歷史最大值不是100,才會去進行了更新

網上看了一下解決方案:

悲觀鎖

直接鎖行記錄

這個我在本地測試,確實有效,一個事務開始沒結束,第二個事務一個等待,不過會導致處于阻塞狀態,因為系統并發,不敢考慮,也就是記錄下這個方式.

手動模擬:

執行第一個事務:

-- 視頻100BEGIN;

SELECT * FROM `biz_coursestudyhistory` WHERE sid = 5777166;

UPDATE biz_coursestudyhistory set studyStatus = 100,versionNO=versionNO+1 WHERE sid = 1 AND versionNO = 0;

-- commit ; 先不執行,先注解掉,只執行上面的

Mysql數據庫中的事務并發如何解決

接著執行第二個事務:

BEGIN;
 
UPDATE biz_coursestudyhistory set studyStatus = 90,versionNO=versionNO+1 WHERE sid = 1 AND versionNO = 0;
 
SELECT * FROM `biz_coursestudyhistory` WHERE sid = 1 FOR UPDATE;
 
COMMIT;

會發現成功不了,一直處于等待狀態.

查看鎖

Mysql數據庫中的事務并發如何解決

確實被鎖住了,這里只要執行第一個事務的commit ,第二個事務就會執行.

從這里可以看出,行鎖可以直接達到理想的數據統一狀態,一個事務修改,其他都不能操作,感覺這種比較適合銀行這種安全性的項目

樂觀鎖:

這種比較簡單,并且不會造成阻塞

方式就是加上版本號

var maxver = select max(version) from table

更新的話使用

update table set studystatus = xxx,version = version +1 where id =1 and version = maxver

寫入的話

INSERT into table (contentStudyID,courseWareID,studyStatus,studyTime,endTime)
SELECT 27047358,3163,100,333,NOW() FROM dual WHERE NOT EXISTS (SELECT 1 FROM table WHERE contentStudyID =27047358 AND
courseWareID = 3163
 )

這種方式,可以在更新或者寫入的時候,直接判斷庫里面存在的數據是否存在,如果不存在則是別其他的線程使用了.

修改為這種寫法后,使用jmeter進行多線程測試,從最開始的多條記錄更新成功,變成只有一個成功,后面的失敗.

從最開始的插入多條記錄,到后來的只能插入一條數據了

Mysql數據庫中的事務并發如何解決

以上就是Mysql事務并發然后就解決,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

靖西县| 漳平市| 威宁| 阜康市| 安多县| 襄樊市| 广昌县| 宁河县| 沽源县| 洪湖市| 葵青区| 柘荣县| 江油市| 永宁县| 台安县| 临邑县| 泸定县| 泾川县| 隆尧县| 灌云县| 农安县| 安达市| 阿巴嘎旗| 瓦房店市| 侯马市| 通渭县| 措勤县| 宁乡县| 依安县| 奇台县| 电白县| 泰兴市| 安宁市| 青冈县| 琼结县| 葫芦岛市| 海晏县| 霍邱县| 离岛区| 阿荣旗| 六枝特区|