創建事務序列化註意事項 語法:set transaction isolation level serialize; 序列化會指定下列內容: 語句不能讀取已由其他事務修改但尚未提交的數據。 任何其他事務都不能在當前事務完成之前修改由當前事務讀取的數據。 在當前事務完成之前,其他事務不能使用當前事務中任 ...
創建事務序列化註意事項
語法:set transaction isolation level serialize;
序列化會指定下列內容:
-
語句不能讀取已由其他事務修改但尚未提交的數據。
-
任何其他事務都不能在當前事務完成之前修改由當前事務讀取的數據。
-
在當前事務完成之前,其他事務不能使用當前事務中任何語句讀取的鍵值插入新行。
範圍鎖處於與事務中執行的每個語句的搜索條件相匹配的鍵值範圍之內。 這樣可以阻止其他事務更新或插入任何行,從而限定當前事務所執行的任何語句。 這意味著如果再次執行事務中的任何語句,則這些語句便會讀取同一組行。 在事務完成之前將一直保持範圍鎖。 這是限制最多的隔離級別,因為它鎖定了鍵的整個範圍,併在事務完成之前一直保持範圍鎖。 因為併發級別較低,所以應只在必要時才使用該選項。 該選項的作用與在事務內所有 SELECT 語句中的所有表上設置 HOLDLOCK 相同。
使用T-SQL腳本創建序列化事務
第一步:創建一個修改會話和一個讀取會話。
修改會話腳本:
--聲明資料庫使用
use testss;
go
--開啟修改會話
begin transaction updatetran
update test1 set name='資料庫快照' where id='1';
waitfor delay '00:00:10';
commit transaction
go
讀取會話腳本:
--聲明資料庫使用
use testss;
go
--創建讀取會話
begin transaction readtran
select * from test1 where id='1';
commit transaction;
go
第二步:運行讀取會話,查看讀取會話結果並記錄,便於與序列化讀取會話結果作比較。
第三步:修改讀取會話腳本,添加事務隔離級別。
讀取會話腳本:
--聲明資料庫使用
use testss;
go
--設置事務隔離級別
set transaction isolation level serializable;
--創建讀取會話
begin transaction readtran
select * from test1 where id='1';
commit transaction;
go
第四步:先執行修改會話,然後立即執行讀取會話。
修改會話執行:依次顯示修改會話執行狀態和執行結果。
讀取會話執行:依次顯示讀取會話執行狀態和執行結果。