事務級別有哪些?

Esther_Cheung發表於2024-03-26
  1. Read Uncommitted(讀未提交):
    • 這是最低的事務隔離級別。
    • 一個事務可以讀取另一個尚未提交的事務的修改。
    • 可能出現的問題包括髒讀、不可重複讀和幻讀。
    • 由於它允許讀取未提交的資料,所以效能上可能稍好一些,但資料一致性風險也最高。
  2. Read Committed(讀已提交):
    • 大多數資料庫系統的預設隔離級別(但不是MySQL的預設級別)。
    • 一個事務只能讀取已經提交的事務的修改。
    • 避免了髒讀,但可能出現不可重複讀和幻讀。
    • 在這個級別下,一個事務內對同一資料的多次讀取可能返回不同的結果,因為其他事務可能在此期間修改了資料並提交。
  3. Repeatable Read(可重複讀):
    • 這是MySQL,MongoDB的預設隔離級別。
    • 在同一事務內的多次讀取會看到相同的資料行,即使其他事務在此期間修改了這些行並提交。
    • 避免了髒讀和不可重複讀,但可能出現幻讀(即一個事務讀取了幾行資料,另一個併發事務插入新行,然後第一個事務再次讀取同樣的範圍時,看到了這些新行)。
    • 通常,這個級別透過多版本併發控制(MVCC)來實現。
  4. Serializable(序列化):
    • 這是最高的隔離級別。
    • 它透過強制事務序列執行,而不是併發執行,來避免髒讀、不可重複讀和幻讀。
    • 由於事務是序列執行的,因此效能通常最差。
    • 在這個級別下,讀操作會加共享鎖,寫操作會加排它鎖,因此其他事務不能修改被讀取的資料。

相關文章