首頁 > 軟體

深入理解MySQL事務的4種隔離級別

2022-04-20 13:03:25

1 簡介

事務的4種隔離級別分別是讀未提交(Read Uncommitted)、讀已提交(Read Committed)、 可重複讀(Repeatable Read)和序列化(Serializable)。

首先,在瞭解這4種隔離級別前就必須先要了解其前提,也就是事務,本文簡單介紹一下關於事務。

之後,我們也要理解這4種隔離級別產生的原因和場景展現以及4種隔離級別是如何解決問題的。

2 什麼是資料庫事務?

事務由一個有限的資料庫操作序列組成,這些操作要麼全部執行,要麼全部不執行,是一個不可分割的工作單位。

例如一個銀行轉賬場景:

A轉賬B 100元,A的賬號扣除100元,B的賬號加上100塊。假如中間出現任何異常,例如,在A的賬號扣100元時,銀行癱瘓,B的賬號餘額沒有發生變化。這時候就需要事務來保證將A的錢還回去。

2.1 事務的四大特性(ACID)

  • 原子性:事務作為一個整體被執行,包含在其中的對資料庫的操作要麼全部都執行,要麼都不執行。
  • 一致性:指在事務開始之前和事務結束以後,資料不會被破壞,假如A賬戶給B賬戶轉10塊錢,不管成功與否,A和B的總金額是不變的。
  • 隔離性:多個事務並行存取時,事務之間是相互隔離的,一個事務不應該被其他事務干擾,多個並行事務之間要相互隔離。
  • 永續性:表示事務完成提交後,該事務對資料庫所作的操作更改,將持久地儲存在資料庫之中。

3 並行事務會導致的問題

  • 髒讀:事務 A 讀取了事務 B 更新的資料,然後 B 進行回滾操作,那麼A讀取的資料就是髒資料
  • 不可重複讀:事務A多次讀取同一資料,事務B在事務A多次讀取的過程中,對資料做了更新並提交,導致事務A多次奪取同一資料時,結果不一致。
  • 幻讀:系統管理員A將資料庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。


IT145.com E-mail:sddin#qq.com