事务的分类

来源:互联网 发布:fps网页.知乎 编辑:程序博客网 时间:2024/06/07 06:37
按事务的启动与执行方式,可以将事务分为3类:
  ①显示事务 :也称之为用户定义或用户指定的事务,即可以显式地定义启动和结束的事务。分布式事务属于显示事务
  ②自动提交事务:默认事务管理模式。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。

  ③隐性事务:当连接以此模式进行操作时,sql将在提交或回滚当前事务后自动启动新事务。无须描述事务的开始,只需提交或回滚每个事务。它生成连续的事务链。

以前听个前辈说过,在默认情况下,一条sql语句就是一个事务,其实说的就是事务的自动提交模式,因为它是数据库引擎管理事务时默认的模式。下面笼统的举几个例子,分别对应下这三种模式:

1、显示事务:这个就是我们在存储过程代码中写了BEGIN TRANSCATION,或者C#、Java中调用API开启一个事务,然后在没错的情况下COMMIT,有错误的时候rollback;

2、自动提交事务:这种模式是数据库引擎处理事务的默认模式,我们和数据库建立了连接,无论是在数据库客户端或是代码中让数据库执行1条或多条SQL语句时,每一条语句都会视为一个事务,执行成功自动提交,错误后自动回滚。值得注意的是执行多条SQL语句的批处理时,只要出错的语句是运行时的错误,出错的语句回滚不会影响前边已提交的语句。但是如果出错的语句是编译错误,虽然看着像前几条SQL语句回滚了,其实是这个批处理压根就没执行,因为是编译(语法)错误;

3、隐性事务:使用 Transact-SQL SET IMPLICIT_TRANSACTIONS ON或者响应API将其设置为ON的时候,则开启隐性事务模式。在该模式下,每个 SQL 语句都视为单独的事务,和自动提交模式有点类似,但是很明显的区别是:自动模式下会根据单个SQL语句执行是否成功,自动提交或回滚,但是在隐性模式下,无论单个SQL语句执行成功与否,都需要手动提交或回滚。

最后,再补点自动提交模式和其他两种模式的转换:

自动提交模式是 SQL Server 数据库引擎的默认事务管理模式。每个 Transact-SQL 语句在完成时,都被提交或回滚。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。只要没有显式事务或隐性事务覆盖自动提交模式,与数据库引擎实例的连接就以此默认模式操作。自动提交模式也是 ADO、OLE DB、ODBC 和 DB 库的默认模式。

在 BEGIN TRANSACTION 语句启动显式事务或隐性事务设置为开启之前,与数据库引擎实例的连接一直以自动提交模式操作。当提交或回滚显式事务或关闭隐性事务模式时,连接将返回到自动提交模式。

如果设置为 ON,SET IMPLICIT_TRANSACTIONS 会将连接设置为隐式事务模式。如果设置为 OFF,则使连接恢复为自动提交事务模式。


0 0
原创粉丝点击