本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
隔離層級的定義
ACID 中的 "I" 代表隔離。交易的隔離程度決定了其他並行交易可能影響其操作的資料有多少。
SQL:1992 標準Tx1 和 Tx2) 之間可能發生的三種互動 (它稱為「現象」):
Dirty read– 當Tx1修改項目,然後Tx2在Tx1遞交了變更之前讀取該項目,就會發生此情況。然後,如果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 隔離。這保證在交易開始時,交易可在存在之資料的快照上操作,而且其他交易都不能變更該快照。