隔离级别 READ UNCOMMITTED

在示例数据库上创建示例表

CREATE TABLE [dbo].[Table_1](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [title] [varchar](50) NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

现在打开第一个查询编辑器(在数据库上)插入下面的代码,并执行( 不要触摸 –rollback ),在这种情况下,你在 DB 上插入一行但提交更改。

begin tran

INSERT INTO Table_1 values('Title 1')

SELECT * FROM [Test].[dbo].[Table_1]

--rollback

现在打开第二个查询编辑器(在数据库上),插入下面的代码并执行

begin tran

set transaction isolation level READ UNCOMMITTED

SELECT * FROM [Test].[dbo].[Table_1]

你可能会注意到,在第二个编辑器中,你可以从第一个事务中看到新创建的行(但未提交)。在第一个编辑器上执行回滚(选择回滚字并执行)。

-- Rollback the first transaction
rollback

在第二个编辑器上执行查询,你会看到记录消失(幻读),这是因为你告诉第二个事务获取所有行,也是未提交的。

使用时更改隔离级别时会发生这种情况

set transaction isolation level READ UNCOMMITTED