<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ***** ## 事務 ### 1\. 為什么要有事務 事務廣泛的運用于訂單系統、銀行系統等多種場景 例如: > A用戶和B用戶是銀行的儲戶,現在A要給B轉賬500元,那么需要做以下幾件事: > > 1. 檢查A的賬戶余額>500元; > 2. A 賬戶中扣除500元; > 3. B 賬戶中增加500元; 正常的流程走下來,A賬戶扣了500,B賬戶加了500,皆大歡喜。 <br>那如果A賬戶扣了錢之后,系統出故障了呢?A白白損失了500,而B也沒有收到本該屬于他的500。 <br>以上的案例中,隱藏著一個前提條件:A扣錢和B加錢,要么同時成功,要么同時失敗。事務的需求就在于此 ### 事務 所謂事務,它是一個操作序列,這些操作要么都執行,要么都不執行,它是一個不可分割的工作單位 <br>例如,銀行轉帳工作:從一個帳號扣款并使另一個帳號增款,這兩個操作要么都執行,要么都不執行。所以,應該把他們看成一個事務。事務是數據庫維護數據一致性的單位,在每個事務結束時,都能保持數據一致性 <br>假如一個銀行的數據庫有兩張表:支票表(checking)和儲蓄表(savings)。現在要從用戶Jane的支票賬戶轉移200美元到她的儲蓄賬戶,那么至少需要三個步驟: 1.檢查支票賬戶的余額高于或者等于200美元。 2.從支票賬戶余額中減去200美元。 3.在儲蓄帳戶余額中增加200美元。 上述三個步驟的操作必須打包在一個事務中,任何一個步驟失敗,則必須回滾所有的步驟。 ### 事務四大特性(簡稱ACID) * 原子性(Atomicity) * 一致性(Consistency) * 隔離性(Isolation) * 持久性(Durability) <br> * 原子性(atomicity) > 一個事務必須被視為一個不可分割的最小工作單元,整個事務中的所有操作要么全部提交成功,要么全部失敗回滾,對于一個事務來說,不可能只執行其中的一部分操作,這就是事務的原子性 * 一致性(consistency) > 數據庫總是從一個一致性的狀態轉換到另一個一致性的狀態。(在前面的例子中,一致性確保了,即使在執行第三、四條語句之間時系統崩潰,支票賬戶中也不會損失200美元,因為事務最終沒有提交,所以事務中所做的修改也不會保存到數據庫中。) * 隔離性(isolation) > 通常來說,一個事務所做的修改在最終提交以前,對其他事務是不可見的。(在前面的例子中,當執行完第三條語句、第四條語句還未開始時,此時有另外的一個賬戶匯總程序開始運行,則其看到支票帳戶的余額并沒有被減去200美元。) * 持久性(durability) > 一旦事務提交,則其所做的修改會永久保存到數據庫。(此時即使系統崩潰,修改的數據也不會丟失。) ### 事務命令 表的引擎類型必須是innodb類型才可以使用事務,這是mysql表的默認引擎 #### 開啟事務,命令如下: * 開啟事務后執行修改命令,變更會維護到本地緩存中,而不維護到物理表中 ~~~ begin; 或者 start transaction; ~~~ #### 提交事務,命令如下 * 將緩存中的數據變更維護到物理表中 ~~~ commit; ~~~ #### 回滾事務,命令如下: * 放棄緩存中變更的數據 ~~~ rollback; ~~~ #### 注意 1. 修改數據的命令會自動的觸發事務,包括insert、update、delete 2. 而在SQL語句中有手動開啟事務的原因是:可以進行多次數據的修改,如果成功一起成功,否則一起會滾到之前的數據 ## 事務練習-模擬銀行轉賬
                  <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>

                              哎呀哎呀视频在线观看