Mysql

可序列化時間表:有人可以幫我理解嗎?

  • May 24, 2017

我正在努力學習我擁有的數據庫課程,所以我試圖找到我問題的答案。

有人問過這個:

添加適當的鎖以按照以下時間表強制執行可串列化:

T1:W(Y)

T2:R(Y)

和:

添加適當的鎖以按照以下時間表強制執行可串列化:

T1: R (Y) R (Z) W (Y)

T2:W(Y)R(Z)

對我來說,現在,這是騙局。有人可以向我解釋一下我到底需要在這裡做什麼……例如:我需要遵循的結構是什麼?我需要一些結構來理解它。

R(Y) 是對數據庫對象 Y 的讀取操作

W(Y) 是對 Y 的寫操作

S(Y) 在 Y 上設置共享(讀)鎖

X(Y) 在 Y 上設置排他(寫)鎖

U(Y) 釋放 Y 上的任何鎖

PS:這與問題的答案無關,雖然我會很感激……但這是關於我理解為什麼這是答案。

希望可以有人幫幫我。我會很感激的!

我剛剛發明了一個可能有幫助的蹩腳的例子。

你有沒有在加油站改變價格時開車?(價格是大數字,需要記下並提出新的數字。)

不可能有兩個人同時改變相同的價格——排他鎖。

路過的每個人都可以讀取數字——共享鎖(有點)。但是,如果你想得到你看到的價格,並且不想在你抽油之前改變它,它就會變得更加複雜。您希望共享鎖防止更改價格,直到您完成“交易”(以您看到的價格填充您的油箱)。

在我蹩腳的例子中,你不能真正取出共享鎖,除非是“臟讀”。“臟讀”是“事務隔離”的一種。在您看到價格之後和加油之前,價格可能會發生變化。有了更強的隔離,你就會得到你所看到的價格。

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