![](/img/trans.png)
[英]Does TRANSACTION ISOLATIoN LEVEL SERIALIZABLE create READ lock
[英]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.