Microsoft SQL Server
PHANTOM przeczytaj
Szukaj…
Wprowadzenie
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