Microsoft SQL Server
PHANTOM legge
Ricerca…
introduzione
Osservazioni
È possibile leggere i vari ISOLATION LEVEL
su MSDN
Livello di isolamento LEGGI NON CORRETTO
Creare una tabella di esempio su un database di esempio
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]
Ora apri un primo editor di query (sul database) inserisci il codice sottostante ed esegui ( non toccare il --rollback ) in questo caso inserisci una riga su DB ma non commetti modifiche.
begin tran
INSERT INTO Table_1 values('Title 1')
SELECT * FROM [Test].[dbo].[Table_1]
--rollback
Ora apri un Second Query Editor (sul database), inserisci il codice qui sotto ed esegui
begin tran
set transaction isolation level READ UNCOMMITTED
SELECT * FROM [Test].[dbo].[Table_1]
Si può notare che sul secondo editor è possibile visualizzare la riga appena creata (ma non impegnata) dalla prima transazione. Al primo editor eseguire il rollback (selezionare la parola rollback ed eseguire).
-- Rollback the first transaction
rollback
Esegui la query sul secondo editor e vedi che il record scompare (lettura fantasma), questo si verifica perché dici, alla seconda transazione per ottenere tutte le righe, anche i non inviati.
Ciò si verifica quando si modifica il livello di isolamento con
set transaction isolation level READ UNCOMMITTED