Microsoft SQL Server
PHANTOM lu
Recherche…
Introduction
Remarques
Vous pouvez lire les différents ISOLATION LEVEL
sur MSDN
Niveau d'isolement LISEZ ICI
Créer un exemple de table sur une base de données exemple
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]
Maintenant, ouvrez un éditeur de première requête (sur la base de données) insérez le code ci-dessous et exécutez ( ne touchez pas le --rollback ) dans ce cas, vous insérez une ligne dans la base de données mais ne validez pas les modifications.
begin tran
INSERT INTO Table_1 values('Title 1')
SELECT * FROM [Test].[dbo].[Table_1]
--rollback
Maintenant, ouvrez un Second Query Editor (sur la base de données), insérez le code ci-dessous et exécutez
begin tran
set transaction isolation level READ UNCOMMITTED
SELECT * FROM [Test].[dbo].[Table_1]
Vous remarquerez peut-être que sur le second éditeur, vous pouvez voir la ligne nouvellement créée (mais non validée) de la première transaction. Sur le premier éditeur, exécutez la restauration (sélectionnez le mot de restauration et exécutez-le).
-- Rollback the first transaction
rollback
Exécutez la requête sur le second éditeur et vous voyez que l'enregistrement disparaît (lecture fantôme), cela se produit parce que vous dites à la 2ème transaction que vous obtenez toutes les lignes, y compris les non validées.
Cela se produit lorsque vous modifiez le niveau d'isolement avec
set transaction isolation level READ UNCOMMITTED