Skip to content

Commit df07dd1

Browse files
authored
Merge pull request #360 from NikhilBhargav/main
Types of Locks in SQL Server
2 parents d261b25 + 27cc61c commit df07dd1

File tree

2 files changed

+272
-0
lines changed

2 files changed

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