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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ![](https://img.kancloud.cn/d9/ed/d9edeb022087974422bcf208791c8a0f_1094x469.png) ## 什么是事務? 事務是邏輯上的一組操作,要么都執行,要么都不執行 ## 事務的四大特性 原子性(Atomicity)、一致性(Consistent)、隔離性(Isalotion)、持久性(Durable)**,簡稱為`ACID` 1. **原子性**:是指事務的原子性操作,**對數據的修改要么全部執行成功,要么全部失敗,實現事務的原子性,undo log保證** 2. **一致性**:是指**執行事務前后的狀態要一致**,可以理解為數據一致性。**undo log+redo log保證** 3. **隔離性**:側重指**事務之間相互隔離,不受影響**,這個與事務設置的隔離級別有密切的關系。**鎖(共享、排他)+mvcc保證** 4. **持久性**:則是指在**一個事務提交后,這個事務的狀態會被持久化到數據庫中,也就是事務提交,對數據的新增、更新將會持久化到數據庫中。redo log保證** Mysql默認的隔離級別:**可重復讀**。 REPEATABLE-READ(可重讀)**事務隔離級別下使用的是Next-Key Lock 鎖算法,因此可以避免幻讀的產生,這與其他數據庫系統(如 SQL Server)是不同的。所以說InnoDB 存儲引擎的默認支持的隔離級別是**REPEATABLE-READ(可重讀)**已經可以完全保證事務的隔離性要求,即達到了 SQL標準的**SERIALIZABLE(可串行化) ## ## 隔離級別 **讀未提交-讀提交-可重復讀-串行化**,**級別越來越高,隔離也就越來越嚴實,到最后的串行化,當出現讀寫鎖沖突的時候,后面的事務只能等前面的事務完成后才能繼續訪問** 1. **讀未提交:讀取到別的事務還沒有提交的數據,從而產生了臟讀**。 2. **讀提交:讀取別的事務已經提交的數據,從而產生不可重復讀。** 3. **可重復讀:事務開啟過程中看到的數據和事務剛開始看到的數據是一樣的,從而產生幻讀,在Mysql的中通過MVCC多版本控制的一致性視圖解決了不可重復讀問題以及通過間隙鎖解決了幻讀問題。** 4. **串行化:對于同一行記錄,若是讀寫鎖發生沖突,后面訪問的事務只能等前面的事務執行完才能繼續訪問**。 不可重復讀的重點是修改,幻讀的重點在于新增或者刪除 # MVCC ### 什么是MVCC MVCC是一種多版本并發控制機制 MVCC中規定**每一行數據都有多個不同的版本,一個事務更新操作完后就生成一個新的版本** ### MVCC是為了解決什么問題 * 大多數的MYSQL事務型存儲引擎,如,InnoDB,Falcon以及PBXT都不使用一種簡單的行鎖機制.事實上,他們都和MVCC–多版本并發控制來一起使用. * 大家都應該知道,鎖機制可以控制并發操作,但是其系統開銷較大,而MVCC可以在大多數情況下代替行級鎖,使用MVCC,能降低其系統開銷. ### MVCC實現 MVCC是通過保存數據在某個時間點的快照來實現的. 不同存儲引擎的MVCC. 不同存儲引擎的MVCC實現是不同的,典型的有樂觀并發控制和悲觀并發控制. ### MVCC 具體實現分析(原理) ? InnoDB的MVCC,是通過在每行記錄后面保存兩個隱藏的列來實現的,這兩個列,分別保存了這個行的創建時間,一個保存的是行的刪除時間。這里存儲的并不是實際的時間值,而是系統版本號(可以理解為事務的ID),沒開始一個新的事務,系統版本號就會自動遞增,事務開始時刻的系統版本號會作為事務的ID. # 數據庫日志 ## 1、mysql中的日志文件都有哪些 ①重做日志 redo log ②回滾日志 undo log ③二進制日志 bin log ④錯誤日志 error log ⑤慢查詢日志 slow query log ⑥一般查詢日志 general log ⑦中繼日志 relay log ## Mysql中redolog 和 binlog的作用和區別 ①redolog屬于物理日志,記錄改數據頁的更新狀態內容 ②binlog屬于邏輯日志,記錄更新的操作語句的原始邏輯 ③redolog是循環寫,日志的空間大小是固定的;binlog是追加寫入,寫完一個寫下一個,不會進行數據的覆蓋 ## 作為主從復制和數據恢復使用哪一個? redo log作為服務器異常宕機后事務數據自動恢復使用,binlog可以作為主從復制和數據恢復使用,binlog沒有自動crash-safe的能力 ## bin log 作用:用于主從復制,實現主從同步 ## redo log 作用:確保日志的持久性,防止在發生故障,臟頁未寫入磁盤。重啟數據庫會進行redo log執行重做,達到事務一致性 ## undo log 作用:保證數據的原子性,記錄事務發生之前的一個版本,用于回滾,innodb事務可重復讀和讀取已提交 隔離級別就是通過mvcc+undo實現 ## relay log 作用:用于數據庫主從同步,將主庫發來的bin log保存在本地,然后從庫進行回放
                  <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>

                              哎呀哎呀视频在线观看