gpt4 book ai didi

sql - 可序列化事务隔离锁

转载 作者:行者123 更新时间:2023-12-03 00:13:55 27 4
gpt4 key购买 nike

我已经为事务设置了可序列化的事务隔离锁。但是我观察到一些意外的结果。

我的查询是

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

这里 col1 是主键。这里 col1 的值为 10,11,12....19,20 的行被锁定以进行更新/插入。在 where 条件下,我给定的条件为 col1>10 和 col1<20,但仍有 col1=10 和 col1=20 的行被锁定。

如果我给

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

然后 col2 的值从 9 到 21 的行被锁定。那么为什么具有 9 和 21 的 col1 在这里被锁定呢?

对于下面的查询,全表被锁定。这里 col3 是非主列。如果 where 条件中的列不是主键,我不能设置锁定吗?

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

最佳答案

对于键范围锁定,SQL Server 必须使用索引来满足范围条件,因此对于您的最后一个查询,您需要在 col3 上建立索引(如果计划确实如此,则可能需要查询提示来强制使用它)不使用它)

此外,它不仅仅锁定 WHERE 子句中的特定范围。它锁定 key 。键上的范围锁可以保护从该键向下到下一个键的范围,因此将被阻止的确切范围取决于索引中存在的键。

更多详细信息/链接为 in my answer here

关于sql - 可序列化事务隔离锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14193939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com