簡體   English   中英

可序列化的事務隔離鎖

[英]serializable transaction isolation lock

我為事務設置了可序列化的事務隔離鎖。但是我正在觀察一些不期望的結果。

我的疑問是

update tabl1 set col2 = 10 where col1 > 10 and col1 < 20

這里col1是主鍵。具有值10,11,12 .... 19,20的col1的行被鎖定以進行更新/插入。 在條件為i的條件下,col1> 10且col1 <20,但仍然有col1 = 10且col1 = 20的行被鎖定。

如果我給

update tabl1 set col2 = 10 where col1 => 10 and col1 <= 20

然后col2值為9到21的行被鎖定。那么為什么col1有9和21被鎖定在這里?

對於下面的查詢,全表被鎖定。這里col3是非主列。如果where條件中的列不是主鍵,我不能設置鎖定嗎?

update tabl1 set col2 = 10 where col3 > 10 and col3 < 20

對於鍵范圍鎖定,SQL Server必須使用索引來滿足范圍條件,因此關於上一個查詢,您需要col3上的索引(如果計划不使用,可能會查詢提示以強制使用它)

此外,它不僅僅鎖定WHERE子句中的特定范圍。 它鎖定鑰匙。 密鑰上的范圍鎖定保護從該密鑰向下到下一個密鑰的范圍,因此將被阻止的確切范圍取決於索引中存在哪些密鑰。

更多細節/鏈接在我的答案中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM