经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
SQLServer之创建提交读
来源:cnblogs  作者:小子pk了  时间:2018/12/11 9:19:49  对本文有异议

事务提交读注意事项

语法:set transaction isolation level read committed。

数据库默认的是两个会话事务之间是提交读。

READ COMMITTED指定语句不能读取已由其他事务修改但尚未提交的数据。 这样可以避免脏读。 其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和虚拟数据。 该选项是 SQL Server 的默认设置。

READ COMMITTED 的行为取决于 READ_COMMITTED_SNAPSHOT 数据库选项的设置:

如果将 READ_COMMITTED_SNAPSHOT 设置为 OFF(默认设置),则 数据库引擎会使用共享锁防止其他事务在当前事务执行读取操作期间修改行。 共享锁还会阻止语句在其他事务完成之前读取由这些事务修改的行。 共享锁类型确定它将于何时释放。 行锁在处理下一行之前释放。 页锁在读取下一页时释放,表锁在语句完成时释放。

如果将 READ_COMMITTED_SNAPSHOT 设置为 ON,则 数据库引擎会使用行版本控制为每个语句提供一个在事务上一致的数据快照,因为该数据在语句开始时就存在。 不使用锁来防止其他事务更新数据。

使用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

第二步:首先执行读取会话脚本,查看并记录读取结果,为提交读作比较。

第三步:首先不添加隔离级别查看数据读取结果,先执行修改会话,在执行读取会话。

修改会话:依次显示修改执行状态和执行结果。

读取会话:依次显示执行状态和执行结果。

第四步:(未设置会话隔离级别)结果分析:首先执行修改后会话,然后立即执行读取会话,中间会有两秒的点击时间间隔,等待两个事物都执行完毕查看执行结果,修改会话使用了10s,读取会话使用了8s(中间有两秒的点击时间差),读取会话在修改会话完成后顺利读取到了修改结果,与第二步结果执行查询的结果不同。

第五步:在读取会话设置隔离级别,重新运行第三步,结果与第四步分析一直。

读取会话脚本:

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

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号