MSSQL – Understanding Isolation Level By Example (Repeatable Read)



MSSQL – Understanding Isolation Level By Example (Repeatable Read)

MSSQL - Understanding Isolation Level By Example (Repeatable Read)

Example SQL Statements below used in the video, you can Copy and Paste for Transaction Isolation Level of Serializable, Read Committed, Read Uncommitted, Repeatable Read

–=====================================
— Windows/Session #1
–=====================================
SELECT @@SPID

IF EXISTS (SELECT 1 FROM sys.tables WHERE name = ‘SampleTable’)
DROP TABLE SampleTable

CREATE TABLE [SampleTable]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](100) NULL,
[Value] [varchar](100) NULL,
[DateChanged] [datetime] DEFAULT(GETDATE()) NULL,
CONSTRAINT [PK_SampleTable] PRIMARY KEY CLUSTERED ([Id] ASC)
)

INSERT INTO SampleTable(Name, Value)
SELECT ‘Name1’, ‘Value1’
UNION ALL
SELECT ‘Name2’, ‘Value2’
UNION ALL
SELECT ‘Name3’, ‘Value3’

SELECT * FROM SampleTable
BEGIN TRAN
INSERT INTO SampleTable(Name, Value) VALUES(‘Name4’, ‘Value4’)
–UPDATE SampleTable SET Name = Name + Name
–UPDATE SampleTable SET Name = Name + Name WHERE Name = ‘Name1′
UPDATE SampleTable SET Name = Name + Name WHERE ID = 2
DELETE FROM SampleTable WHERE ID = 4
WAITFOR DELAY ’00:0:10′
COMMIT TRAN

–=====================================
— Windows/Session #2
–=====================================

—————————————————
— This window/session is default READ COMMITTED —
—————————————————
SELECT @@SPID

BEGIN TRAN
SELECT * FROM SampleTable
WAITFOR DELAY ’00:00:10′
SELECT * FROM SampleTable
WAITFOR DELAY ’00:00:10′
SELECT * FROM SampleTable
ROLLBACK

SELECT b.name, c.name, a.*
FROM sys.dm_tran_locks a
INNER JOIN sys.databases b ON a.resource_database_id = database_id
INNER JOIN sys.objects c ON a.resource_associated_entity_id = object_id

–=====================================
— Windows/Session #3
–=====================================

—————————————————–
— This window/session is default REPEATABLE READ —
—————————————————–
SELECT @@SPID

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
SELECT * FROM SampleTable
WAITFOR DELAY ’00:00:10′
SELECT * FROM SampleTable
WAITFOR DELAY ’00:00:10’
SELECT * FROM SampleTable
COMMIT TRAN

Comments are closed.