【问题标题】:Why does SQL Server read uncommitted data when the default isolation level is READ COMMITTED?为什么默认隔离级别为 READ COMMITTED 时 SQL Server 会读取未提交的数据?
【发布时间】:2020-02-13 21:08:18
【问题描述】:

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

假设您运行此查询:

begin tran

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

select * from dbo.inventory

(并且您没有提交事务)

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

【问题讨论】:

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

标签: sql sql-server transactions isolation-level


【解决方案1】:

显然,一个事务需要看到它所改变的一切。

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

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

【讨论】:

    猜你喜欢
    • 2010-11-30
    • 2014-09-18
    • 1970-01-01
    • 2015-05-20
    • 2019-06-18
    • 1970-01-01
    • 2012-07-04
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多