gpt4 book ai didi

sql-server - 如何根据隔离级别读取原始数据

转载 作者:行者123 更新时间:2023-12-04 18:16:40 24 4
gpt4 key购买 nike

我的测试表:

CREATE TABLE [dbo].[Personel](
[PersonelID] [int] NOT NULL,
[Name] [nchar](10) NULL,
CONSTRAINT [PK_Personel] PRIMARY KEY CLUSTERED
(
[PersonelID] ASC
)
)

我的测试数据:
insert into Personel
values (1, 'Jack')
, (2, 'John')
, (3, 'Kevin')

连接 A:
begin tran
update Personel
set Name = 'Michael'
where PersonelID = 1

连接 B:
SET TRANSACTION ISOLATION LEVEL ????

SELECT Name
FROM Personel WITH (????)
where PersonelID = 1

连接 A 启动事务并尝试更新数据,但事务仍在进行中。连接 B 尝试读取正在更新的数据。

有没有办法(隔离级别或提示或这两者的组合)在事务提交或回滚之前查看原始数据(Jack,而不是 Michael)?

最佳答案

您可以在 SNAPSHOT 隔离级别访问旧版本的数据。

这要求数据库在开始之前启用快照隔离:

ALTER DATABASE <dbname> SET ALLOW_SNAPSHOT_ISOLATION ON

然后在连接 B
SET TRANSACTION ISOLATION LEVEL SNAPSHOT

select * from Personel

快照隔离有一些性能注意事项,因为它复制了读入 tempdb 的行。

Documentation reference

关于sql-server - 如何根据隔离级别读取原始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11538285/

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