Skip to content

Commit 27cc61c

Browse files
committed
SQL-472: Types of Locks in SQL Server
1 parent 79db687 commit 27cc61c

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
-- Change schema to University
2+
USE University;
3+
4+
--Shared Lock (S)
5+
6+
--Session 1
7+
-- Set the isolation level to REPEATABLE READ to hold shared locks until commit/rollback
8+
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
9+
10+
BEGIN TRAN;
11+
SELECT id, name, credits
12+
FROM Course
13+
WHERE id='CS111';
14+
15+
--Check the locks held by this session:
16+
SELECT request_session_id, resource_type, request_mode
17+
FROM sys.dm_tran_locks
18+
WHERE request_session_id = @@SPID
19+
AND resource_type = 'KEY';
20+
21+
--Commit later
22+
COMMIT TRAN;
23+
24+
--Session 2
25+
SELECT id, name, credits
26+
FROM Course
27+
WHERE id='CS111';
28+
29+
BEGIN TRAN;
30+
31+
UPDATE Course
32+
SET credits = 8
33+
WHERE id='CS111';
34+
35+
ROLLBACK TRAN;
36+
37+
--Sesion 3
38+
SELECT
39+
session_id,
40+
blocking_session_id,
41+
command,
42+
status
43+
FROM sys.dm_exec_requests
44+
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
45+
WHERE blocking_session_id <> 0;
46+
47+
--EXEC sp_who2;
48+
49+
--Exclusive Lock (X)
50+
51+
--Session 1
52+
53+
-- Set the isolation level to REPEATABLE READ to hold shared locks until commit/rollback
54+
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
55+
56+
BEGIN TRAN;
57+
UPDATE Course
58+
SET credits = 8
59+
WHERE id='CS111';
60+
61+
--Check the locks held by this session:
62+
SELECT request_session_id, resource_type, request_mode
63+
FROM sys.dm_tran_locks
64+
WHERE request_session_id = @@SPID;
65+
66+
--Rollback later
67+
ROLLBACK TRAN;
68+
69+
--Session 2
70+
BEGIN TRAN;
71+
SELECT id, name, credits
72+
FROM Course
73+
WHERE id='CS111';
74+
75+
COMMIT TRAN;
76+
77+
78+
--Update Lock (U)
79+
80+
--Session 1
81+
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
82+
83+
BEGIN TRAN;
84+
SELECT id, name, credits
85+
FROM Course
86+
WITH (UPDLOCK)
87+
WHERE id='CS111';
88+
89+
--Check the locks held by this session:
90+
SELECT request_session_id, resource_type, request_mode
91+
FROM sys.dm_tran_locks
92+
WHERE request_session_id = @@SPID;
93+
94+
--Session 2
95+
SELECT id, name, credits
96+
FROM Course
97+
WHERE id='CS111';
98+
99+
UPDATE Course
100+
SET credits = 8
101+
WHERE id='CS111';
102+
103+
--Shared with Intent Exclusive (SIX)
104+
105+
--Session 1
106+
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
107+
108+
BEGIN TRAN;
109+
110+
-- Explicitly request a SIX lock:
111+
SELECT id, name, credits
112+
FROM Course
113+
WITH (TABLOCKX, HOLDLOCK)
114+
WHERE id='CS111';
115+
116+
UPDATE Course
117+
SET credits = 8
118+
WHERE id='CS111';
119+
120+
--Rollback later
121+
ROLLBACK TRAN;
122+
123+
SELECT request_session_id, resource_type, request_mode
124+
FROM sys.dm_tran_locks
125+
WHERE request_session_id = @@SPID;
126+
127+
--Session 2
128+
BEGIN TRAN;
129+
130+
SELECT *
131+
FROM Course
132+
WHERE id='CS111';
133+
134+
COMMIT TRAN;

0 commit comments

Comments
 (0)