SQL 服务器中的事务隔离级别
Transaction Isolations level in SQL Server
我正在尝试更新 table,它控制应用程序(应用程序执行一些 select 语句)。我想更新事务中的 table,将隔离级别设置为读取未提交,这样如果应用程序没有按预期工作,我可以回滚事务。
但是下面的代码不起作用:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
go
begin transaction
go
update [DB].[dbo].[Table]
set ID = ID - 281
where ID > 2
当我打开另一个查询 window 时,我无法查询此 table... 我想,以这样的事务级别,我可以不滚动地查询 table back/commiting 笔交易。
您需要从读取数据的会话中使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT *
FROM [DB].[dbo].[Table]
该查询将在没有锁定的情况下立即执行。你会看到脏数据。
隔离级别的工作方式与您想象的不同。
你只能读取未提交的数据,但在你提交之前,其他人仍然看不到你在事务中做了什么。
如果您想在 select 中查看此事务中未提交的数据,您需要设置
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
到这个select
我正在尝试更新 table,它控制应用程序(应用程序执行一些 select 语句)。我想更新事务中的 table,将隔离级别设置为读取未提交,这样如果应用程序没有按预期工作,我可以回滚事务。
但是下面的代码不起作用:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
go
begin transaction
go
update [DB].[dbo].[Table]
set ID = ID - 281
where ID > 2
当我打开另一个查询 window 时,我无法查询此 table... 我想,以这样的事务级别,我可以不滚动地查询 table back/commiting 笔交易。
您需要从读取数据的会话中使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT *
FROM [DB].[dbo].[Table]
该查询将在没有锁定的情况下立即执行。你会看到脏数据。
隔离级别的工作方式与您想象的不同。
你只能读取未提交的数据,但在你提交之前,其他人仍然看不到你在事务中做了什么。
如果您想在 select 中查看此事务中未提交的数据,您需要设置
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
到这个select