隔離層級的定義 - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

隔離層級的定義

ACID 中的 "I" 代表隔離。交易的隔離程度決定了其他並行交易可能影響其操作的資料有多少。

SQL:1992 標準建立了描述隔離層級的詞彙。它定義了兩個並行交易 (Tx1Tx2) 之間可能發生的三種互動 (它稱為「現象」):

  • Dirty read – 當 Tx1 修改項目,然後 Tx2Tx1 遞交了變更之前讀取該項目,就會發生此情況。然後,如果 Tx1 從未成功遞交變更或將其回復,則 Tx2 已讀取從未進入資料庫的值。

  • Non-repeatable read – 當 Tx1 讀取項目,接著 Tx2 修改或刪除該項目並遞交變更,然後 Tx1 嘗試重新讀取該項目時,便會發生此情況。Tx1 現在會讀取與之前不同的值,或發現該項目不再存在。

  • Phantom read – 當 Tx1 讀取一組滿足搜尋條件的項目,接著 Tx2 新增符合搜尋條件的新項目,然後 Tx1 重複搜尋時,便會發生此情況。Tx1 現在取得與之前不同的一組項目。

這三種類型的互動,每一種都可能導致資料庫中產生的資料不一致。

SQL:1992 標準定義了四個隔離層級,在三種互動類型和他們可以產生的不一致方面具有不同的保證。在所有四個層級,可以保證交易完全執行或完全不執行:

  • READ UNCOMMITTED – 允許所有三種互動 (亦即,已變更讀取、不可重複讀取及幽靈讀取)。

  • READ COMMITTED – 已變更讀取是不可行,但不可重複讀取和幽靈讀取卻可行。

  • REPEATABLE READ – 已變更讀取或不可重複讀取全都不可行,但幽靈讀取仍然可行。

  • SERIALIZABLE – 三種類型的互動現象都不能發生。

多版本並行控制 (MVCC) 允許另一種隔離,即SNAPSHOT隔離。這保證在交易開始時,交易可在存在之資料的快照上操作,而且其他交易都不能變更該快照。