站長資訊網
        最全最豐富的資訊網站

        mysql樂觀鎖怎么實現

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

        mysql樂觀鎖怎么實現

        本教程操作環境: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失敗,報錯回滾或自旋。

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

        1、更新庫存:

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

        推薦學習:mysql視頻教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲人成精品久久久久| 欧美精品一区二区蜜臀亚洲| 亚洲欧美日韩精品久久亚洲区 | 国产精品国色综合久久| 日韩精品一区二区三区在线观看 | 青青草国产精品久久久久| 日韩精品乱码AV一区二区 | 国产成人无码精品一区在线观看 | 久久久久无码精品国产不卡| 久久青青草原精品国产软件| 99久久精品无码一区二区毛片 | 亚洲精品国产成人片| 国内精品久久久久久久coent | 国产精品热久久毛片| 久久亚洲精品中文字幕三区| 国语精品一区二区三区| 亚洲精品线路一在线观看| 免费国产在线精品一区| 国产在线精品国自产拍影院| 国产成人精品一区在线| 91久久精品国产成人久久| 久久99国产精品一区二区| 国产精品美女久久久| 91麻豆精品视频在线观看| 精品亚洲麻豆1区2区3区| 老司机午夜精品视频资源| 午夜精品久久久久久99热| 亚洲爆乳精品无码一区二区三区| 日韩精品电影一区亚洲| 无码人妻精品一区二区三区99不卡 | 91亚洲国产成人久久精品网址| 国产l精品国产亚洲区在线观看| 欧美精品欧美人与动人物牲交| 夜夜高潮夜夜爽国产伦精品| 亚洲国产高清精品线久久| 久久丝袜精品中文字幕 | 99久久99久久精品国产| 99精品国产一区二区| 国产成人AV无码精品| 国产在线精品观看免费观看| 久久精品国产亚洲Aⅴ香蕉|