SQL Server 机会锁定

问题描述 投票:0回答:1

我想根据具体情况使用机会主义。我不想将其设置为服务器范围或数据库范围的默认值,直到我有机会慢慢尝试它。

我知道这可以根据具体情况来完成,因为 SQL Server Management Studio 在连接到目标服务器上的目标数据库时在单个查询上使用它,但我不知道如何指定我要使用它。几个月来进行了大量的谷歌搜索并大量阅读了微软知识库条目,但没有取得成果。

我已经学会了如何将其作为整个服务器的标准(默认?)打开,实际上已经在开发服务器上做到了这一点,但还没有学会如何在逐个查询的基础上做到这一点。

在选择查询上请求它的方式与在更新语句上指定它的方式有区别吗?我不认为我在更新时需要它,但在选择时我确实需要它。我问只是为了获得更全面的了解。

我在谷歌上搜索了“在单个查询上指定 SQL Server 乐观锁定”的许多变体,更改了术语的顺序并删除了一些以查看是否有区别。

Google 试图将乐观锁定、优化锁定、机会锁定混为一谈,并引入许多与 SQL Server 无关的情况,例如文件锁定。我找不到任何要点。

我希望找到一篇包含设置选项或锁定提示的知识库文章来完成我想做的事情。当使用主(聚集、整数键)对单行中的单列进行非常简单的更新时,如果无法索引的全表扫描陷入死锁,我就会面临锁定。例如,假设我们想要使用客户编号(int)作为键来更新一位客户(具有有效邮政编码)的客户余额,并且它针对一个查询运行,我们正在检查国家/地区为美国的所有客户以及邮政编码不是数字。这个例子是人为的,重点是我不能或不想索引邮政编码以加快查询速度。我相信,通过乐观锁定,这种情况不会出现死锁。

sql-server locking optimistic
1个回答
-2
投票

设置事务隔离级别 { 阅读未提交的内容 |已提交读 |可重复读取 |快照 |可串行化 }

将在连接期间更改隔离级别或直到被后续设置命令更改为止。就我而言,使用此方法将隔离级别降低到快照达到了预期的结果。

这是有记录的https://learn.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-ver16

© www.soinside.com 2019 - 2024. All rights reserved.