Szukaj…


Wprowadzenie

W systemach bazodanowych izolacja określa, w jaki sposób integralność transakcji jest widoczna dla innych użytkowników i systemów, więc określa, w jaki sposób / kiedy zmiany dokonane przez jedną operację stają się widoczne dla innych. Odczytywanie fantomowe może wystąpić, gdy dane nie zostały jeszcze zatwierdzone w bazie danych.

Uwagi

Możesz przeczytać różne ISOLATION LEVEL na MSDN

Poziom izolacji PRZECZYTAJ NIEZGODNE

Utwórz przykładową tabelę w przykładowej bazie danych

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]

Teraz otwórz pierwszy edytor zapytań (w bazie danych) wstaw poniższy kod i uruchom ( nie dotykaj --rollback ) w tym przypadku wstawisz wiersz w DB, ale nie zatwierdzasz zmian.

begin tran

INSERT INTO Table_1 values('Title 1')

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

--rollback

Teraz otwórz drugi edytor zapytań (w bazie danych), wstaw poniższy kod i uruchom

begin tran

set transaction isolation level READ UNCOMMITTED

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

Możesz zauważyć, że w drugim edytorze możesz zobaczyć nowo utworzony wiersz (ale nie zatwierdzony) z pierwszej transakcji. W pierwszym edytorze wykonaj wycofanie (wybierz słowo wycofania i uruchom).

-- Rollback the first transaction
rollback

Wykonaj zapytanie w drugim edytorze i zobaczysz, że rekord zniknął (odczyt fantomowy), dzieje się tak, ponieważ mówisz, że do drugiej transakcji, aby uzyskać wszystkie wiersze, również niezaangażowane.

Dzieje się tak, gdy zmienisz poziom izolacji za pomocą

set transaction isolation level READ UNCOMMITTED


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow