Isolation-Level

SQL92 的 REPEATABLE-READ 是否排除了寫入偏斜 (A5B)?

  • September 27, 2015

可重複閱讀

SQL92的定義中,REPEATABLE READ是由幾個條件定義的。

P1(“臟讀”):

  1. P1 (“Dirty read”): SQL-transaction T1 修改一行。SQL 事務 T2 然後在 T1 執行 COMMIT 之前讀取該行。如果 T1 然後執行 ROLLBACK,則 T2 將讀取從未送出的行,因此可能被認為從未存在過。

P2(“不可重複讀取”):

2)P2(“Non-repeatable read”):SQL-transaction T1 讀取一行。SQL 事務 T2 然後修改或刪除該行並執行 COMMIT。如果 T1 然後嘗試重新讀取該行,它可能會收到修改後的值或發現該行已被刪除。

原子性和no updates will be lost

四個隔離級別保證每個 SQL 事務將被完全執行或根本不執行,並且不會失去任何更新。

表 9,其中定義REPEATABLE READ必須排除 P1 和 P2:

表 9,“SQL 事務隔離級別和三種現象”指定了給定隔離級別可能和不可能的現象。

所以在SQL92的定義中REPEATABLE READ,必須排除P1、P2,並且支持原子性,不失去更新。

A5B(寫歪斜)

另一方面,A5B(Write Skew)在A Critique of ANSI SQL Isolation Levels中定義:

假設 T1 讀取 x 和 y,這與 C() 一致,然後 T2 讀取 x 和 y,寫入 x,並送出。然後 T1 寫入 y。如果 x 和 y 之間存在約束,則可能會違反該約束。從歷史來看:

r1

$$ x $$… r2$$ y $$…w1$$ y $$…w2$$ x $$…(出現 c1 和 c2) (寫歪斜)

REPEATABLE READ排除 A5B(寫入偏斜)嗎?

在後面的論文中,它聲稱REPEATABLE READ將排除表 4 中的 A5B(寫入偏斜)。以允許的可能異常為特徵的隔離類型。,我不相信。

任何想法?

REPEATABLE READ 是否排除了寫入偏斜?

的 - 如果您認同 Critique 的觀點,即 ANSI 定義基於鎖定行為​​,例如:

**備註 6.**表 2 的鎖定隔離級別和表 3 的現象學定義是等價的。換句話說,PO、PI、P2、P3 是對 Locking 行為的變相重新定義。

從這個角度來看,歷史:

r1[x]...r2[y]...w1[y]...w2[x]...(c1 and c2 occur)

…在獲取長時間讀取共享鎖時被w1[y]阻止,因為被r2[y]. 同樣,w2[x]會被r1[x]. 因此,這個歷史不可能出現。

- 如果您從字面上解釋 ANSI 定義。這些被廣泛認為是不完整的,所以這個結果並不那麼令人驚訝。

引用自:https://dba.stackexchange.com/questions/116230