最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql事務(wù)并發(fā)問題解決方案

 更新時(shí)間:2020年09月21日 11:31:39   作者:手撕高達(dá)的村長  
這篇文章主要介紹了Mysql事務(wù)并發(fā)問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在開發(fā)中遇到過這樣一個(gè)問題

一個(gè)看視頻記錄,更新到100就表示看完了,后面再有請(qǐng)求不繼續(xù)更新了.

結(jié)果是:

導(dǎo)致,里面很多數(shù)據(jù)出現(xiàn)問題.

推測(cè)是以下的情況才會(huì)導(dǎo)致

第一條請(qǐng)求 事務(wù)在執(zhí)行中,還未提交(因?yàn)楸镜赜袝r(shí)候比較難再現(xiàn),于是手動(dòng)在程序中,第一條記錄處理的時(shí)候,sleep了幾秒,就達(dá)到這種效果了)

第二條請(qǐng)求 事務(wù)已經(jīng)開始執(zhí)行,這個(gè)時(shí)候查到的歷史最大值不是100,才會(huì)去進(jìn)行了更新

網(wǎng)上看了一下解決方案:

悲觀鎖

直接鎖行記錄

這個(gè)我在本地測(cè)試,確實(shí)有效,一個(gè)事務(wù)開始沒結(jié)束,第二個(gè)事務(wù)一個(gè)等待,不過會(huì)導(dǎo)致處于阻塞狀態(tài),因?yàn)橄到y(tǒng)并發(fā),不敢考慮,也就是記錄下這個(gè)方式.

手動(dòng)模擬:

執(zhí)行第一個(gè)事務(wù):

-- 視頻100BEGIN;

SELECT * FROM `biz_coursestudyhistory` WHERE sid = 5777166;

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

-- commit ; 先不執(zhí)行,先注解掉,只執(zhí)行上面的

接著執(zhí)行第二個(gè)事務(wù):

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;

會(huì)發(fā)現(xiàn)成功不了,一直處于等待狀態(tài).

查看鎖

確實(shí)被鎖住了,這里只要執(zhí)行第一個(gè)事務(wù)的commit ,第二個(gè)事務(wù)就會(huì)執(zhí)行.

從這里可以看出,行鎖可以直接達(dá)到理想的數(shù)據(jù)統(tǒng)一狀態(tài),一個(gè)事務(wù)修改,其他都不能操作,感覺這種比較適合銀行這種安全性的項(xiàng)目

樂觀鎖:

這種比較簡(jiǎn)單,并且不會(huì)造成阻塞

方式就是加上版本號(hào)

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
 )

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

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

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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql 8.0.15 安裝配置方法圖文教程

    mysql 8.0.15 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.15 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • MySQL性能優(yōu)化之如何高效正確的使用索引

    MySQL性能優(yōu)化之如何高效正確的使用索引

    這篇文章主要介紹了MySQL如何高效正確的使用索引,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下
    2020-08-08
  • VPS下修改MySQL root用戶密碼的方法

    VPS下修改MySQL root用戶密碼的方法

    VPS下修改MySQL root用戶密碼的方法,需要的朋友可以參考下。
    2010-12-12
  • SQL中的開窗函數(shù)(窗口函數(shù))

    SQL中的開窗函數(shù)(窗口函數(shù))

    這篇文章主要介紹了SQL中的開窗函數(shù)(窗口函數(shù))使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • MySQL優(yōu)化之緩存優(yōu)化(續(xù))

    MySQL優(yōu)化之緩存優(yōu)化(續(xù))

    本文是MySQL優(yōu)化系列文章的第一篇緩存優(yōu)化的續(xù)篇,為大家更為詳細(xì)的介紹緩存優(yōu)化的方方面面,希望大家能夠喜歡
    2017-03-03
  • MySQL中ROUND函數(shù)進(jìn)行四舍五入操作陷阱分析

    MySQL中ROUND函數(shù)進(jìn)行四舍五入操作陷阱分析

    這篇文章主要介紹了MySQL中ROUND函數(shù)進(jìn)行四舍五入操作陷阱,結(jié)合實(shí)例形式分析了mysql使用ROUND函數(shù)進(jìn)行四舍五入運(yùn)算中出現(xiàn)的問題及其錯(cuò)誤原因,需要的朋友可以參考下
    2018-06-06
  • 數(shù)據(jù)庫中間件MyCat的介紹

    數(shù)據(jù)庫中間件MyCat的介紹

    今天小編就為大家分享一篇關(guān)于數(shù)據(jù)庫中間件MyCat的介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Linux下MySQL5.7.18 yum方式從卸載到安裝過程圖解

    Linux下MySQL5.7.18 yum方式從卸載到安裝過程圖解

    這篇文章主要介紹了Linux下MySQL5.7.18 yum方式從卸載到安裝過程圖解,需要的朋友可以參考下
    2017-06-06
  • MySQL數(shù)據(jù)庫實(shí)現(xiàn)MMM高可用群集架構(gòu)

    MySQL數(shù)據(jù)庫實(shí)現(xiàn)MMM高可用群集架構(gòu)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫實(shí)現(xiàn)MMM高可用群集架構(gòu),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • MySQL數(shù)據(jù)類型DECIMAL用法詳解

    MySQL數(shù)據(jù)類型DECIMAL用法詳解

    這篇文章主要介紹了MySQL數(shù)據(jù)類型DECIMAL用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評(píng)論

萨迦县| 双峰县| 罗甸县| 开鲁县| 浦县| 九龙县| 内丘县| 科技| 营口市| 吴江市| 兴城市| 昌平区| 久治县| 定安县| 洛宁县| 福州市| 枣强县| 三江| 内江市| 太和县| 鹿泉市| 犍为县| 丽水市| 皮山县| 花垣县| 冀州市| 合江县| 通河县| 黎平县| 宁安市| 遂平县| 健康| 普宁市| 香港| 开封县| 岐山县| 竹山县| 洛隆县| 巴马| 阿城市| 井冈山市|