數據庫事務和事務隔離

什麼是事務

數據庫事務(Database Transaction) ,是指作爲單個邏輯工作單元執行的一系列讀或寫操作。其目的是提供三種方法:失敗恢復到正常狀態的方法、保持一致性的方法、併發操作之間保持隔離的方法,通俗的說是那一系列操作要麼完全地執行,要麼完全地不執行。

事務的ACID特性

  • A:原子性(Actomicity),該系列操作作爲一個整體,不能被分割,要麼全執行,要麼都不執行;
  • C:一致性(Consistency),確保數據從一種狀態變爲另一種狀態;
  • I:隔離性(Isolation),多個事務併發執行時,彼此之間互不影響;
  • D:持久性(Durability),當事務提交成功後,對數據的修改要永久保存在數據庫中。

併發異常類型

  • 回滾丟失: 由於一個事務的失敗回滾導致另一個事務的更新丟失了;
  • 覆蓋丟失: 更新被其他事務給覆蓋了;
  • 髒讀: 一個事務讀取了另一個事務修改未提交的數據;
  • 不可重複讀: 一個事務對同一行數據執行了兩次或更多次查詢,但是卻得到了不同的結果;
  • 幻讀: 與不可重複讀相似,不過針對的是數據的數量,當一個事務查詢記錄兩次或多次時,得到的數量不一致。

事務隔離級別

  • 讀未提交: 一個事務的更新語句沒有提交,但是別的事務可以讀到這個改變;

  • 讀已提交: 一個事務只能看到其他事務已經提交的更新、看不到未提交的更新,消除了髒讀和回滾丟失,Oracle/Sqlserver就是此類;

  • 可重複讀: 一個事務中進行兩次或多次同樣的對於數據內容的查詢,得到的結果是一樣的,但不保證對於數據條數的查詢是一樣的,只要存在讀改行數據就禁止寫,消除了不可重複讀和覆蓋丟失。

  • 串行化: 事務執行不允許其他事務操作,只要存在讀就禁止寫,但可以同時讀,消除了幻讀,但是效率太低。

    隔離級別 回滾丟失 髒讀 不可重複讀 覆蓋丟失 幻讀
    讀未提交
    讀已提交
    可重複讀
    串行化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章