设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1583|回复: 0

SQLServer之创建不可重复读

[复制链接]

18

主题

187

金钱

294

积分

入门用户

发表于 2019-8-26 16:23:19 | 显示全部楼层 |阅读模式

创建不可重复读注意事项
语法: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


第二步:首先执行读取会话并记录读取会话结果,为不可重复读结果做比较。
1.png

第三步:设置读取会话隔离级别为不可重复读。
读取会话脚本示例:

--声明数据库引用
use testss;
go

--设置会话隔离级别
set transaction isolation level repeatable read;

--开启事务
begin transaction trans
select * from test1 where id='1';
commit transaction;
go

第四步:再次执行,首先执行修改会话,然后执行读取会话。
修改会话:依次显示为执行状态和执行结果。
2.png
3.png
读取会话:依次显示为执行状态和执行结果。
4.png
5.png
第六步:结果分析:修改会话在执行期间,读取会话不能读取结果,知道修改会话提交事务,读取会话才立即执行读取到修改结果,不可重复读避免了脏读。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表