創建不可重覆讀註意事項 語法:set transaction isolation level repeatable read。 指定語句不能讀取已由其他事務修改但尚未提交的行,並且指定,其他任何事務都不能在當前事務完成之前修改由當前事務讀取的數據。 對事務中的每個語句所讀取的全部數據都設置了共用鎖, ...
創建不可重覆讀註意事項
語法:set transaction isolation level repeatable read。
指定語句不能讀取已由其他事務修改但尚未提交的行,並且指定,其他任何事務都不能在當前事務完成之前修改由當前事務讀取的數據。
對事務中的每個語句所讀取的全部數據都設置了共用鎖,並且該共用鎖一直保持到事務完成為止。 這樣可以防止其他事務修改當前事務讀取的任何行。 其他事務可以插入與當前事務所發出語句的搜索條件相匹配的新行。 如果當前事務隨後重試執行該語句,它會檢索新行,從而產生虛擬讀取。 由於共用鎖一直保持到事務結束,而不是在每個語句結束時釋放,因此併發級別低於預設的 READ COMMITTED 隔離級別。 此選項只在必要時使用。
使用T-SQL腳本創建不可重覆讀
第一步:創建兩個會話,一個讀取會話, 一個修改會話。
修改會話腳本示例:
--聲明資料庫引用
use testss;
go
--開始事務
begin transaction readtran
update test1 set name='事務不可重覆讀' where id='1';
waitfor delay '00:00:10';
commit transaction;
go
讀取會話腳本示例:
--聲明資料庫引用
use testss;
go
--開啟事務
begin transaction trans
select * from test1 where id='1';
commit transaction;
go
第二步:首先執行讀取會話並記錄讀取會話結果,為不可重覆讀結果做比較。
第三步:設置讀取會話隔離級別為不可重覆讀。
讀取會話腳本示例:
--聲明資料庫引用
use testss;
go
--設置會話隔離級別
set transaction isolation level repeatable read;
--開啟事務
begin transaction trans
select * from test1 where id='1';
commit transaction;
go
第四步:再次執行,首先執行修改會話,然後執行讀取會話。
修改會話:依次顯示為執行狀態和執行結果。
讀取會話:依次顯示為執行狀態和執行結果。