本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
隔離層級的定義
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隔離。這保證在交易開始時,交易可在存在之資料的快照上操作,而且其他交易都不能變更該快照。