SQL92 的 REPEATABLE-READ 是否排除了寫入偏斜 (A5B)?
可重複閱讀
在SQL92的定義中,
REPEATABLE READ
是由幾個條件定義的。P1(“臟讀”):
- 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 定義。這些被廣泛認為是不完整的,所以這個結果並不那麼令人驚訝。