Isolation-Level

我無法理解可序列化的定義

  • December 29, 2016

每個人都這麼說

“可序列化”是指對於任何給定的並發事務集,這些事務的串列排序會產生相同的結果。

他們還舉了一個例子

假設你有一個初始值為 10 的屬性;你有兩筆交易——一筆價值翻倍,另一筆增加了七。兩個不同的客戶端發起兩個事務。在孤立語義下,該屬性唯一可接受的值是 27(先加倍後加 7 的結果)和 34(先加 7 後加倍的結果)。任何其他值(例如 20 或 17)都是錯誤的。

在範例中我們有哪個“相同的結果”?我們必須進行哪些重新排序才能產生相同的結果?

在範例中我們有哪個“相同的結果”?我們必須進行哪些重新排序才能產生相同的結果?

開場白是對可序列化隔離的錯誤陳述。

SQL-92 標準中可序列化隔離級別的定義包含以下文本(強調我的):

可串列執行被定義為並行執行 SQL 事務的操作的執行,其產生與那些相同 SQL 事務的**某些串列執行相同的效果。**串列執行是每個 SQL 事務在下一個 SQL 事務開始之前執行完成。

給出的範例與該定義一致。

以上文字摘自我的文章The Serializable Isolation Level

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