gpt4 book ai didi

sql - 我可以将 NOLOCK 应用于数据库范围的设置吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:54:29 27 4
gpt4 key购买 nike

有没有办法让 WITH(NOLOCK) 应用于在特定数据库上运行的任何 SELECT 语句?

最佳答案

不,但您可以使用 SNAPSHOT ISOLATION SQL Server 2005 及更高版本的数据库级别,它应该对解决死锁有很大帮助

SQL Server 2005 通过引入 SNAPSHOT 隔离级别和额外的 READ COMMITTED 实现来扩展 SQL-92 隔离级别。新的 READ_COMMITTED_SNAPSHOT 隔离级别可以透明地替换所有事务的 READ COMMITTED。

SNAPSHOT 隔离指定事务中读取的数据永远不会反射(reflect)其他同步事务所做的更改。事务使用事务开始时存在的数据行版本。读取数据时没有锁定数据,因此 SNAPSHOT 事务不会阻止其他事务写入数据。写入数据的事务不会阻止快照事务读取数据。您需要通过设置 ALLOW_SNAPSHOT_ISOLATION 数据库选项来启用快照隔离才能使用它。

READ_COMMITTED_SNAPSHOT 数据库选项确定在数据库中启用快照隔离时默认 READ COMMITTED 隔离级别的行为。如果您没有显式指定 READ_COMMITTED_SNAPSHOT ON,则 READ COMMITTED 应用于所有隐式事务。这会产生与设置 READ_COMMITTED_SNAPSHOT OFF(默认)相同的行为。当 READ_COMMITTED_SNAPSHOT OFF 生效时,数据库引擎使用共享锁来强制执行默认隔离级别。如果将 READ_COMMITTED_SNAPSHOT 数据库选项设置为 ON,则数据库引擎默认使用行版本控制和快照隔离,而不是使用锁来保护数据。

关于sql - 我可以将 NOLOCK 应用于数据库范围的设置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2836135/

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