gpt4 book ai didi

sql - SELECT 语句 - NOLOCK 和 SET TRANSACTION ISOLATION LEVEL READ COMMITTED

转载 作者:行者123 更新时间:2023-12-02 08:31:48 25 4
gpt4 key购买 nike

我的理解是,当在 SELECT 语句中使用 NOLOCK 时,它也可以读取未提交/脏行。但我想利用表上的 NOLOCK 提示,以便我的 SELECT 查询运行得更快。

现在,表上的 NOLOCK 与“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”一起给我带来了 NOLOCK 优势和更快的 SELECT 查询(因为 NOLOCK)且仅提交行(因为 SET)吗?

最佳答案

是的,表提示会覆盖隔离级别设置,因此您仍然会遇到脏读

易于测试

首先运行这个

create table bla(id int)
insert bla values(1)



begin tran
select * from bla with (updlock, holdlock)

确保不要提交 tran!打开另一个窗口并运行它

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

select * from bla -- with (nolock)

你不会得到任何返回。

打开另一个窗口并立即运行

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

select * from bla with (nolock)

如您所见,您将取回该行

顺便说一句,READ COMMITTED是默认的隔离级别,无需设置

看看Snapshot Isolation它不会给你返回脏数据,但仍然不会锁定

关于sql - SELECT 语句 - NOLOCK 和 SET TRANSACTION ISOLATION LEVEL READ COMMITTED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3857047/

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