语法: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
修改会话执行:依次显示修改会话执行状态和执行结果。
读取会话执行:依次显示读取会话执行状态和执行结果。