1. 程式人生 > 其它 >MySQL --- 讀書筆記 --- 事務

MySQL --- 讀書筆記 --- 事務

事務概述

事務是資料庫區別於檔案系統的重要特性之一,當我們有了事務就會讓資料庫始終保持一致性,同時我們還能通過事務的機制恢復到某個時間點,這樣就可以保證已提交到資料庫的修改不會因為系統崩潰而丟失

事務:一組邏輯操作單元,使資料從一種狀態變換到另一種狀態

事務處理的原則:保證所有事務都作為一個工作單元來執行,當在一個事務中執行多個操作時,要麼所有事務都被commit,修改被永久儲存下來,要麼放棄所有修改,整個事務rollback到最初狀態

事務ACID特性

  • 原子性(atomicity):是指事務是一個不可分割的工作單元,要們全部提交,要麼全部失敗回滾,不存在中間狀態
  • 一致性(consistency):是指事務執行前後,資料從一個合法狀態
    變換到另一個合法狀態,這種狀態是語義上的,由業務定義
  • 隔離性(isolation):是指一個事務的執行不能被其他事務干擾,即一個事務內部的操作及使用的資料對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾
  • 永續性(durability):是指一個事務一旦被提交,它對資料庫中資料的改變是永久性的,接下來其他操作和資料庫故障不應對其有影響

四個特性中,A是基礎,I是手段,C是約束條件,D是目的

事務狀態變遷

事務理論角度分類

  • 扁平式事務,所有操作在一個層次,begin開始,rollback或者commit結束,操作是原子的,要麼提交要麼回滾
  • 鏈式事務:一個事務由多個子事務鏈式組成,在提交一個事務時,釋放不需要的資料物件,將必要的處理上下文隱式地傳給下一個要開始的事務,前一個子事務的提交操作和下一個事務的開始操作合併成一個原子操作,這意味著下一個事務將看到上一個事務的結果,就好像在一個事務中一樣。這樣,在提交子事務時就可以釋放不需要的資料物件,而不必等到整個事務完成後才釋放。
  • 巢狀事務:是一個層次結構框架,由一個頂層事務控制著各個層次的事務
  • 分散式事務:通常是在一個分散式環境下執行的扁平式事務

事務隔離級別

資料併發問題

問題

  1. 髒寫:事務A修改了另一個未提交事務B所修改過的資料
  2. 髒讀:事務A讀取了另一個未提交事務B所修改過的資料
  3. 不可重複讀:事務A讀取了一個欄位,然後事務B修改了這個欄位,當事務A再次讀取這個欄位,發現值被修改
  4. 幻讀:事務A讀取一個欄位,事務B插入一些新資料,事務A再次讀取時,表中多了幾行記錄

相應的隔離級別

  1. READ UNCOMMITTED:讀未提交,所有事務都可以看到其他未提交的事務的執行結果,不能避免的情況有髒讀、不可重複讀、幻讀
  2. READ COMMITTED:讀已提交,一個事務只能看到其他事務已經提交的執行結果,不能避免的情況有不可重複讀、幻讀
  3. REPEATABLE READ:可重複讀,重複讀取的資料記錄,不會被其他事務所影響,不能避免的情況有幻讀
  4. SERIALIZABLE:可序列化,事務期間,禁止其他事務對該表執行插入、更新和刪除操作