隔離級別 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