语法: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
第四步:先执行修改会话,然后立即执行读取会话。
修改会话执行:依次显示修改会话执行状态和执行结果。
读取会话执行:依次显示读取会话执行状态和执行结果。