我可以看到如何关闭 SQL Server 中的行级和页级锁定,但我找不到强制 SQL Server 使用行级锁定的方法。有没有办法强制 SQL Server 使用行级锁定而不使用页级锁定?
您可以使用 ROWLOCK 提示,但据我所知,如果资源不足,SQL 可能会决定升级它
来自多科:
ROWLOCK 指定行锁是
当页面或表锁定时采取
通常采取。当指定于
在 SNAPSHOT 上运行的事务
隔离级别,行锁不是
除非 ROWLOCK 与
其他需要锁的表提示,
例如 UPDLOCK 和 HOLDLOCK。
and
锁定提示 ROWLOCK、UPDLOCK 和 XLOCK
获取行级锁可能会放置
锁定索引键而不是
实际数据行。例如,如果一个
表有一个非聚集索引,并且
使用锁提示的 SELECT 语句是
由覆盖索引处理,锁是
在索引键上获取
覆盖索引而不是数据
基表中的行。
最后这对 SQL Server 2005 中的锁升级进行了相当深入的解释,该锁升级在 SQL Server 2008 中进行了更改。
还有,非常深入的:锁定数据库引擎(在线书籍中)
所以,一般来说
UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93
应该没问题,但根据服务器上的索引和负载,它可能最终升级为页面锁定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)