<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                **問題:** 兩個用戶(或以上)對同一個數據對象操作引起的數據丟失。 **解決方案:** 1.悲觀鎖:假設丟失更新一定存在;sql后面加上**for update;**這是數據庫的一種機制。 2.樂觀鎖:假設丟失更新不一定發生。update時候存在版本,更新時候按版本號進行更新。 # 一、樂觀鎖 樂觀鎖,簡單地說,就是從應用系統層面上做并發控制,去加鎖。 實現樂觀鎖常見的方式:版本號version **實現方式:** 在數據表中增加版本號字段,每次對一條數據做更新之前,先查出該條數據的版本號,每次更新數據都會對版本號進行更新。在更新時,把之前查出的版本號跟庫中數據的版本號進行比對,如果相同,則說明該條數據沒有被修改過,執行更新。如果比對的結果是不一致的,則說明該條數據已經被其他人修改過了,則不更新,客戶端進行相應的操作提醒。 ![](https://img.kancloud.cn/96/93/96933d3f1ab234751162749176e38bf0_741x499.png) **代碼:** ![](https://img.kancloud.cn/c8/17/c817ad4868a4024b4df96a8faefd4133_684x147.png) 既然可以用version,那還可以使用時間戳字段,該方法同樣是在表中增加一個時間戳字段,和上面的version類似,也是在更新提交的時候檢查當前數據庫中數據的時間戳和自己更新前取到的時間戳進行對比,如果一致則OK,否則就是版本沖突。 **注意:** 把select語句放在事務中,查詢的就是master主庫了! # 二、悲觀鎖 悲觀鎖,簡單地說,就是從數據庫層面上做并發控制,去加鎖。 在MySQL中使用悲觀鎖,必須關閉MySQL的自動提交,set autocommit=0,MySQL默認使用自動提交 autocommit模式,也即你執行一個更新操作,MySQL會自動將結果提交。 ![](https://img.kancloud.cn/ee/43/ee43dcf02c717db471e75dc6e4f3c93e_672x53.png) 當我們在查詢出items信息后就把當前的數據鎖定,直到我們修改完畢后再解鎖。那么在這個過程中,因為數據被鎖定了,就不會出現有第三者來對其進行修改了。而這樣做的前提是需要將要執行的SQL語句放在同一個事物中,否則達不到鎖定數據行的目的。 ![](https://img.kancloud.cn/ca/75/ca75404dfc372e0a02a86986f876d4fe_673x143.png) 悲觀鎖并不是適用于任何場景,它也存在一些不足,因為悲觀鎖大多數情況下依靠數據庫的鎖機制實現,以保證操作最大程度的獨占性。如果加鎖的時間過長,其他用戶長時間無法訪問,影響了程序的并發訪問性,同時這樣對數據庫性能開銷影響也很大,特別是對長事務而言,這樣的開銷往往無法承受,這時就需要樂觀鎖。 **注意:** 在MySQL中用悲觀鎖務必須確定走了索引,而不是全表掃描,否則將會將整個數據表鎖住**。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看