首页 > 数据库技术 > 详细

SQLServer之创建事务未提交读

时间:2018-12-03 11:48:16      阅读:230      评论:0      收藏:0      [点我收藏+]

未提交读注意事项

使用 SET TRANSACTION ISOLATION LEVEL 指定会话的锁定级别。

一次只能设置一个隔离级别选项,而且设置的选项将一直对那个连接始终有效,直到显式更改该选项为止。 事务中执行的所有读取操作都会在指定的隔离级别的规则下运行,除非语句的 FROM 子句中的表提示为表指定了其他锁定行为或版本控制行为。

事务隔离级别定义了可为读取操作获取的锁类型。 

在事务进行期间,可以随时将事务从一个隔离级别切换到另一个隔离级别,但有一种情况例外。 即在从任一隔离级别更改到 SNAPSHOT 隔离时,不能进行上述操作。 否则会导致事务失败并回滚。 但是,可以将在 SNAPSHOT 隔离中启动的事务更改为任何其他隔离级别。

将事务从一个隔离级别更改为另一个隔离级别之后,便会根据新级别的规则对更改后读取的资源执行保护。 在更改前读取的资源将继续按照以前级别的规则受到保护。

如果在存储过程或触发器中发出 SET TRANSACTION ISOLATION LEVEL,则当对象返回控制时,隔离级别会重设为在调用对象时有效的级别。 

未提交读会造成脏读,事务执行期间读取数据会造成数据前后读取不一致。

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

第二步:首先查看并记录数据原始状态(本例以修改表中名称为例)。

技术分享图片

第三步:设置读取脚本隔离级别。

读取脚本:

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

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

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

第四步:先执行修改脚本,然后执行读取脚本(在修改事务未提交修改结果之前,读取脚本可以直接读取到修改结果)。

修改脚本执行:

技术分享图片

读取脚本执行:

技术分享图片

第五步:查看结果,修改事务还未提交修改结果,读取事务通过设置会话级别可以直接读取修改事务的结果。

SQLServer之创建事务未提交读

原文:https://www.cnblogs.com/vuenote/p/10057565.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!