时间:2021-07-01 10:21:17 帮助过:2人阅读
指定语句不能读取已由其他事务修改但尚未提交的行,并且指定,其他任何事务都不能在当前事务完成之前修改由当前事务读取的数据。
对事务中的每个语句所读取的全部数据都设置了共享锁,并且该共享锁一直保持到事务完成为止。 这样可以防止其他事务修改当前事务读取的任何行。 其他事务可以插入与当前事务所发出语句的搜索条件相匹配的新行。 如果当前事务随后重试执行该语句,它会检索新行,从而产生虚拟读取。 由于共享锁一直保持到事务结束,而不是在每个语句结束时释放,因此并发级别低于默认的 READ COMMITTED 隔离级别。 此选项只在必要时使用。
修改会话脚本示例:
--声明数据库引用
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
修改会话:依次显示为执行状态和执行结果。
读取会话:依次显示为执行状态和执行结果。
SQLServer之创建不可重复读
标签:HERE png table set ted 默认 t-sql 事务 cti