華為云計算 云知識 事務(wù)隔離級別有哪些
事務(wù)隔離級別有哪些

ANSI SQL標(biāo)準(zhǔn)定義了4種事務(wù)隔離級別來避免3種數(shù)據(jù)不一致的問題。事務(wù)等級從高到低,分別為:

1.Serializable(序列化)

系統(tǒng)中所有的事務(wù)以串行地方式逐個執(zhí)行,所以能避免所有數(shù)據(jù)不一致情況。

但是這種以排他方式來控制并發(fā)事務(wù),串行化執(zhí)行方式會導(dǎo)致事務(wù)排隊,系統(tǒng)的并發(fā)量大幅下降,使用的時候要絕對慎重。

2.Repeatable read(可重復(fù)讀)

一個事務(wù)一旦開始,事務(wù)過程中所讀取的所有數(shù)據(jù)不允許被其他事務(wù)修改。

一個隔離級別沒有辦法解決“幻影讀”的問題。

因為它只“保護”了它讀取的數(shù)據(jù)不被修改,但是其他數(shù)據(jù)會被修改。如果其他數(shù)據(jù)被修改后恰好滿足了當(dāng)前事務(wù)的過濾條件(where語句),那么就會發(fā)生“幻影讀”的情況。

其他兩種事務(wù)隔離等級為:

3.Read Committed(已提交讀)

一個事務(wù)能讀取到其他事務(wù)提交過(Committed)的數(shù)據(jù)。

一個事務(wù)在處理過程中如果重復(fù)讀取某一個數(shù)據(jù),而且這個數(shù)據(jù)恰好被其他事務(wù)修改并提交了,那么當(dāng)前重復(fù)讀取數(shù)據(jù)的事務(wù)就會出現(xiàn)同一個數(shù)據(jù)前后不同的情況。

在這個隔離級別會發(fā)生“不可重復(fù)讀”的場景。

4.Read Uncommitted(未提交讀)

一個事務(wù)能讀取到其他事務(wù)修改過,但是還沒有提交的(Uncommitted)的數(shù)據(jù)。

數(shù)據(jù)被其他事務(wù)修改過,但還沒有提交,就存在著回滾的可能性,這時候讀取這些“未提交”數(shù)據(jù)的情況就是“臟讀”。

在這個隔離級別會發(fā)生“臟讀”場景。