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