SQLServer之建立事務序列化

建立事務序列化注意事項

語法:set transaction isolation level serialize;數據庫

序列化會指定下列內容:併發

語句不能讀取已由其餘事務修改但還沒有提交的數據。spa

任何其餘事務都不能在當前事務完成以前修改由當前事務讀取的數據。blog

在當前事務完成以前,其餘事務不能使用當前事務中任何語句讀取的鍵值插入新行。進程

範圍鎖處於與事務中執行的每一個語句的搜索條件相匹配的鍵值範圍以內。 這樣能夠阻止其餘事務更新或插入任何行,從而限定當前事務所執行的任何語句。 這意味着若是再次執行事務中的任何語句,則這些語句便會讀取同一組行。 在事務完成以前將一直保持範圍鎖。 這是限制最多的隔離級別,由於它鎖定了鍵的整個範圍,並在事務完成以前一直保持範圍鎖。 由於併發級別較低,因此應只在必要時才使用該選項。 該選項的做用與在事務內全部 SELECT 語句中的全部表上設置 HOLDLOCK 相同。事務

使用T-SQL腳本建立序列化事務

第一步:建立一個修改會話和一個讀取會話。

修改會話腳本:ip

--聲明數據庫使用
use testss;
goit

--開啓修改會話
begin transaction updatetran
update test1 set name='數據庫快照' where id='1';
waitfor delay '00:00:10';
commit transaction
goio

讀取會話腳本:class

--聲明數據庫使用
use testss;
go

--建立讀取會話
begin transaction readtran
select * from test1 where id='1';
commit transaction;
go

第二步:運行讀取會話,查看讀取會話結果並記錄,便於與序列化讀取會話結果做比較。

clipboard.png

第三步:修改讀取會話腳本,添加事務隔離級別。

讀取會話腳本:

--聲明數據庫使用
use testss;
go

--設置事務隔離級別
set transaction isolation level serializable;

--建立讀取會話
begin transaction readtran
select * from test1 where id='1';
commit transaction;
go

第四步:先執行修改會話,而後當即執行讀取會話。

修改會話執行:依次顯示修改會話執行狀態和執行結果。

clipboard.png

clipboard.png

讀取會話執行:依次顯示讀取會話執行狀態和執行結果。

clipboard.png

clipboard.png

第五步:結果分析:首先執行修改腳本,在修改腳本執行期間當即執行讀取腳本,修改進程在執行,讀取進程被阻塞,直到修改腳本執行成功之後,讀取腳本才能讀取到修改腳本提交的結果。

相關文章
相關標籤/搜索