Zoeken…


Invoering

In databasesystemen bepaalt isolatie hoe transactie-integriteit zichtbaar is voor andere gebruikers en systemen, dus het definieert hoe / wanneer de wijzigingen die door de ene bewerking zijn aangebracht zichtbaar worden voor de andere. De fantoomlezing kan optreden wanneer u gegevens krijgt die nog niet zijn vastgelegd in de database.

Opmerkingen

U kunt de verschillende ISOLATION LEVEL lezen op MSDN

Isolatieniveau LEZEN ONGESCHAKELD

Maak een voorbeeldtabel in een voorbeelddatabase

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]

Open nu een eerste query-editor (in de database), voer de onderstaande code in en voer uit ( raak de --rollback niet aan ). In dit geval voegt u een rij in op DB maar voert u geen wijzigingen door.

begin tran

INSERT INTO Table_1 values('Title 1')

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

--rollback

Open nu een tweede query-editor (in de database), voer de onderstaande code in en voer deze uit

begin tran

set transaction isolation level READ UNCOMMITTED

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

Het is u misschien opgevallen dat u in de tweede editor de nieuw gemaakte rij (maar niet vastgelegd) van de eerste transactie kunt zien. Voer in de eerste editor de rollback uit (selecteer het rollback-woord en voer uit).

-- Rollback the first transaction
rollback

Voer de query uit in de tweede editor en je ziet dat het record verdwijnt (fantoom lezen), dit gebeurt omdat je aan de 2e transactie vertelt om alle rijen te krijgen, ook de niet-vastleggingen.

Dit gebeurt wanneer u het isolatieniveau wijzigt met

set transaction isolation level READ UNCOMMITTED


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow