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

        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號
        主站蜘蛛池模板: 久久久久亚洲精品天堂久久久久久| 亚洲国产成人一区二区精品区| 日韩精品成人a在线观看| 国产麻豆精品一区二区三区v视界| 精品一区二区三区免费观看 | 久久久久99精品成人片欧美| 国产天天综合永久精品日| 国内精品久久久久久野外| 精品无码人妻一区二区免费蜜桃 | 91精品国产91久久久久久| 国产成人精品高清在线观看93| 中国大陆精品视频XXXX| 久久精品国产一区二区三区不卡 | 亚洲欧美精品午睡沙发| 老湿亚洲永久精品ww47香蕉图片| 国产韩国精品一区二区三区| 欧美精品免费观看二区| 国产亚洲欧洲精品| 国产精品免费高清在线观看| 久热这里只有精品视频6| 亚洲国产精品18久久久久久| 中文字幕无码久久精品青草| 四虎国产精品永久在线看| 国产亚洲精品a在线观看| 国产成人无码精品久久久免费| 欧美精品一区二区精品久久| 精品一区二区三区免费| 九九99精品久久久久久| 精品乱人伦一区二区三区| 国产成人亚洲精品| 国产亚洲精品a在线观看app| 国产精品视频网| 久久精品国产99国产精偷| 欧洲精品视频在线观看| 2024最新国产精品一区| segui久久国产精品| 国产成人精品日本亚洲专区| 国产AⅤ精品一区二区三区久久| 国产精品 一区 在线| 精品一久久香蕉国产线看播放| 久久免费国产精品|