为什么SQL Server在默认隔离级别为read COMMITTED时读取未提交的数据?

为什么SQL Server在默认隔离级别为read COMMITTED时读取未提交的数据?,sql,sql-server,transactions,isolation-level,Sql,Sql Server,Transactions,Isolation Level,您有一个dbo.inventory表,itemsInStock为10 假设您运行此查询: begin tran update dbo.inventory set itemsInStock = 5 where ID = 1 select * from dbo.inventory (并且您不提交事务) 如果SQL Server尚未提交,且默认隔离为“已提交读取”,为什么SQL Server会读取5?显然,事务需要查看它更改的所有内容 在这种情况下,SELECT和UPDATE在同一事务中运行,

您有一个dbo.inventory表,itemsInStock为10

假设您运行此查询:

begin tran

update dbo.inventory
set itemsInStock = 5 
where ID = 1

select * from dbo.inventory
(并且您不提交事务)


如果SQL Server尚未提交,且默认隔离为“已提交读取”,为什么SQL Server会读取5?

显然,事务需要查看它更改的所有内容

在这种情况下,SELECT和UPDATE在同一事务中运行,因此更改了当前事务可见的事务(进行了更改)


隔离适用于从该表读取的其他事务。

显然,事务需要查看它更改的所有内容

在这种情况下,SELECT和UPDATE在同一事务中运行,因此更改了当前事务可见的事务(进行了更改)


隔离适用于从该表读取的其他事务。

这是因为它在同一会话中,请尝试在sql server上打开一个新选项卡,然后运行
select*from dbo.inventory
。不同的会话在提交数据之前不会看到数据。这是因为它在同一会话上,请尝试在sql server上打开一个新选项卡,然后运行
select*from dbo.inventory
。在提交数据之前,不同的会话不会看到数据。