語法:set transaction isolation level serialize;數據庫
序列化會指定下列內容:併發
語句不能讀取已由其餘事務修改但還沒有提交的數據。spa
任何其餘事務都不能在當前事務完成以前修改由當前事務讀取的數據。blog
在當前事務完成以前,其餘事務不能使用當前事務中任何語句讀取的鍵值插入新行。進程
範圍鎖處於與事務中執行的每一個語句的搜索條件相匹配的鍵值範圍以內。 這樣能夠阻止其餘事務更新或插入任何行,從而限定當前事務所執行的任何語句。 這意味着若是再次執行事務中的任何語句,則這些語句便會讀取同一組行。 在事務完成以前將一直保持範圍鎖。 這是限制最多的隔離級別,由於它鎖定了鍵的整個範圍,並在事務完成以前一直保持範圍鎖。 由於併發級別較低,因此應只在必要時才使用該選項。 該選項的做用與在事務內全部 SELECT 語句中的全部表上設置 HOLDLOCK 相同。事務
修改會話腳本: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
讀取會話腳本:
--聲明數據庫使用
use testss;
go
--設置事務隔離級別
set transaction isolation level serializable;
--建立讀取會話
begin transaction readtran
select * from test1 where id='1';
commit transaction;
go
修改會話執行:依次顯示修改會話執行狀態和執行結果。
讀取會話執行:依次顯示讀取會話執行狀態和執行結果。