Mysql
可序列化時間表:有人可以幫我理解嗎?
我正在努力學習我擁有的數據庫課程,所以我試圖找到我問題的答案。
有人問過這個:
添加適當的鎖以按照以下時間表強制執行可串列化:
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:這與問題的答案無關,雖然我會很感激……但這是關於我理解為什麼這是答案。
希望可以有人幫幫我。我會很感激的!
我剛剛發明了一個可能有幫助的蹩腳的例子。
你有沒有在加油站改變價格時開車?(價格是大數字,需要記下並提出新的數字。)
不可能有兩個人同時改變相同的價格——排他鎖。
路過的每個人都可以讀取數字——共享鎖(有點)。但是,如果你想得到你看到的價格,並且不想在你抽油之前改變它,它就會變得更加複雜。您希望共享鎖防止更改價格,直到您完成“交易”(以您看到的價格填充您的油箱)。
在我蹩腳的例子中,你不能真正取出共享鎖,除非是“臟讀”。“臟讀”是“事務隔離”的一種。在您看到價格之後和加油之前,價格可能會發生變化。有了更強的隔離,你就會得到你所看到的價格。