隐式事务创建注意事项

IMPLICIT_TRANSACTIONS为 ON 时,系统处于“隐式”事务模式。 这意味着如果 @@TRANCOUNT = 0,下列任一 Transact-SQL 语句都会开始新事务。 这等同于先执行一个不可见的 BEGIN TRANSACTION。

IMPLICIT_TRANSACTIONS为 OFF 时,上述每个 T-SQL 语句都受一个不可见的 BEGIN TRANSACTION 和一个不可见的 COMMIT TRANSACTION 语句限制。为 OFF 时,事务模式为自动提交。 如果 T-SQL 代码发出了一个可见 BEGIN TRANSACTION,那么事务模式为显式。

有几点需要说明:

  • 事务模式为隐式时,如果 @@trancount > 0,则不会发出不可见的 BEGIN TRANSACTION。 但是,任何显式 BEGIN TRANSACTION 语句都会递增 @@TRANCOUNT。

  • INSERT 语句和工作单元中的其他任务完成后,须发出 COMMIT TRANSACTION 语句,直到 @@TRANCOUNT 递减为 0。 也可以发出一个 ROLLBACK TRANSACTION。

  • 不会从表中选择的 SELECT 语句不会启动隐式事务。 例如,SELECT GETDATE(); 或 SELECT 1, 'ABC'; 不需要事务。

  • 由于 ANSI 默认值的原因,可能会意外打开隐式事务。 有关详细信息,请参阅 SET ANSI_DEFAULTS (Transact-SQL).

    IMPLICIT_TRANSACTIONS ON 不常用。 大多数情况下,IMPLICIT_TRANSACTIONS 为 ON,是因为选择了 SET ANSI_DEFAULTS ON。

  • 进行连接时, SQL Server Native Client OLE DB Provider for SQL Server 和 SQL Server Native Client ODBC 驱动程序会自动将 IMPLICIT_TRANSACTIONS 设置为 OFF。 对于与 SQLClient 托管提供程序进行连接,及通过 HTTP 端点接收的 SOAP 请求,SET IMPLICIT_TRANSACTIONS 默认为 OFF。

使用T-SQL脚本创建隐式事务

语法:

--声明数据库引用

use 数据库名称;

go

--设置隐式事务开关

set implicit_transactions { on | off };

--事务业务逻辑

事务操作内容;

--查看是否有事务开启

select @@trancount;

--必须提交或者回滚事务

{ commit | rollback } { tran | transaction};

语法解析:

--set implicit_transactions { on | off };
--为 ON 时,系统处于“隐式”事务模式。 这意味着如果 @@TRANCOUNT = 0
--为 OFF 时,上述每个 T-SQL 语句都受一个不可见的 BEGIN TRANSACTION 和一个不可见的 COMMIT TRANSACTION 语句限制。 为 OFF 时,事务模式为自动提交。

--用@@TRANCOUNT来测试是否已经打开一个事务.
---SELECT @@TRANCOUNT结果是1,意思是当前连接已经打开了一个事务。0的意思是当前没有事务,一个大于1的数的意思是有嵌套事务。
--@@TRANCOUNT的值是1,这个时候必须提交或者回滚事务,不然等到会话结束,表仍然是锁住,会造成阻塞。

--{ commit | rollback } { tran | transaction};
--commit { tran | transaction} 提交事务。
--rollback { tran | transaction} 回滚事务。

示例:

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

--查看implicit_transactions状态
--declare @implicit_transactions varchar(10)='OFF';
--if((2&@@OPTIONS)=2) set @implicit_transactions='ON';
--select @implicit_transactions as implicit_transactions;

--设置隐式事务状态打开
set implicit_transactions on;
go

--开启一个隐式事务
insert into test1(name,sex,age,height) values('测试隐式事务','女','20','180');

--判断是否有隐式事务开启,如果有则提交,没有则回滚
if (select @@TRANCOUNT) is not null and (select @@TRANCOUNT)=1
commit tran;
else
rollback transaction;
go

示例结果:依次显示事务执行结果和查询事务执行结果。

SQLServer之创建隐式事务的更多相关文章

  1. SQLServer之创建显式事务

    显式事务定义 显式事务以 BEGIN TRANSACTION 语句开始,并以 COMMIT 或 ROLLBACK 语句结束. 备注 BEGIN TRANSACTION 使 @@TRANCOUNT 按 ...

  2. SQL Server显式事务与隐式事务

    事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分.如果事务遇到错误且必须取消或回滚,则所有数据库修改均被清除. SQL Server中有一下几 ...

  3. 2018-02-17 中文代码示例[译]Scala中创建隐式函数

    前言: 学习Scala时, 顺便翻译一下自己有兴趣的文章. 代码中所有命名都中文化了(不是翻译). 比如原文用的是甜甜圈的例子. 原文: Scala Tutorial - Learn How To C ...

  4. (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务)

    (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务) 1.概念:隐式事务,显式事务,自动提交事务 2.操作:如何设置事务模式 3.存储过程中的事务 XACT_ABORT 1 ...

  5. MYSQL中默认隐式事务及利用事务DML

    一:默认情况下,MySQL采用autocommit模式运行.这意味着,当您执行一个用于更新(修改)表的语句之后,MySQL立刻把更新存储到磁盘中.默认级别为不可重复读. 二:会造成隐式提交的语句以下语 ...

  6. 基于TransactionScope类的分布式隐式事务

    System.Transactions 命名空间中除了上一节中提到的基于 Transaction 类的显式编程模型,还提供使用 TransactionScope 类的隐式编程模型,它与显示编程模型相比 ...

  7. CALayer的隐式动画和显式动画

    隐式事务 任何对于CALayer属性的修改,都是隐式事务,都会有动画效果.这样的事务会在run-loop中被提交. - (void)viewDidLoad { //初始化一个layer,添加到主视图 ...

  8. grid - 隐式网格

    当网格项目确认在显式网格之外时就会创建隐性网格,当没有足够的空间或者显式的网格轨道来设置网格项目,此时网格项目就会自动创建隐式网格. 隐式网格可以定义:grid-auto-rows.grid-auto ...

  9. C#隐式类型局部变量&隐式类型数组

    [隐式类型局部变量] 可以赋予局部变量推断“类型”var 而不是显式类型.var 关键字指示编译器根据初始化语句右侧的表达式推断变量的类型.推断类型可以是内置类型.匿名类型.用户定义类型或 .NET ...

随机推荐

  1. layui动态设置checkbox选中状态

    今天在使用jquery动态设置layui的checkbox元素的选中状态时始终只能取消选中,却不能重新勾选,点击勾选则没有问题,代码如下 if (value == "true") ...

  2. 英语笔记3(git)

    备注 一: Staging Modified Files Let’s change a file that was already tracked. (tracked 表示该文件已经被git管理过,再 ...

  3. Spring设计模式_工厂模式

    先说下工厂模式的特性 1.对于调用者来说,影藏了复杂的逻辑处理过程,调用者只关心执行结果. 2.工厂要对结果负责,保证生产出符合规范的产品. Git代码地址  https://github.com/w ...

  4. 面试中程序员常见的Redis"刁难"问题,值得一读!

    导读 在程序员面试过程中Redis相关的知识是常被问到的话题.作为一名在互联网技术行业打击过成百上千名的资深技术面试官,总结了面试过程中经常问到的问题.十分值得一读. Redis有哪些数据结构? 字符 ...

  5. WebSocket刨根问底(四)之五子棋大战江湖

    有暇,做了个五子棋大战的小游戏送给各位小伙伴! 用到的知识点有: 1.JavaWeb基础知识(懂jsp,servlet足够) 2.JavaScript和jQuery基本用法 3.了解WebSocket ...

  6. 带着新人学springboot的应用08(springboot+jpa的整合)

    这一节的内容比较简单,是springboot和jpa的简单整合,jpa默认使用hibernate,所以本质就是springboot和hibernate的整合. 说实话,听别人都说spring data ...

  7. Java基础6:代码块与代码加载顺序

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  8. DocX开源WORD操作组件的学习系列一

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  9. PE知识复习之PE的两种状态

    PE知识复习之PE的两种状态 一丶熟悉PE的整体结构 从下面依次网上看.可以得出PE结构 其中DOS头有DOS头结构 也就是 IMAGE_DOS_HEADER 关于结构体的各项属性.前边已经写过了.本 ...

  10. [二十二]JavaIO之LineNumberReader

    功能介绍 LineNumberReader是提供了行号的具体的装饰器类 跟踪行号的缓冲字符输入流 此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用 ...