Microsoft SQL Server
PHANTOM läste
Sök…
Introduktion
Anmärkningar
Du kan läsa de olika ISOLATION LEVEL
på MSDN
Isoleringsnivå LÄS OBESKRIVAD
Skapa en provtabell i en exempeldatabas
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]
Öppna nu en första frågeställningsredigerare (i databasen) infoga koden nedan och kör ( rör inte vid - rollback ) i det här fallet sätter du in en rad på DB men gör inga ändringar.
begin tran
INSERT INTO Table_1 values('Title 1')
SELECT * FROM [Test].[dbo].[Table_1]
--rollback
Öppna nu en andra frågeställare (i databasen), sätt in koden nedan och kör
begin tran
set transaction isolation level READ UNCOMMITTED
SELECT * FROM [Test].[dbo].[Table_1]
Du kanske märker att du på den andra redigeraren kan se den nyskapade raden (men inte begagnad) från den första transaktionen. På den första redigeraren kör rollback (välj rollback-ordet och kör).
-- Rollback the first transaction
rollback
Kör frågan på den andra redaktören och du ser att posten försvinner (fantomläsning), detta beror på att du berättar till den andra transaktionen att få alla rader, även de icke-återställda.
Detta inträffar när du ändrar isoleringsnivån med
set transaction isolation level READ UNCOMMITTED