一种能保证数据完整性的机制。
事务就是作为一个单个逻辑单元执行一系列操作,这一系列操作或者都被执行或者都不被执行。

事务的特性

事务作为一个逻辑工作单元必须有4个属性,称为ACID(原子性,一致性,隔离性和持久性)属性,只有这样才能完成一个事务。

原子性

事务必须是原子工作单元,对其数据修改,要么全部执行,要么全部不执行

一致性

事务在完成时,必须使所有的数据都保持一致状态。在相关的数据库中,所有的规则都必须应用于事务的修改,以保持所有数据的完整性。

隔离性

由并发事务所做的修改必须与其他并发事务所作的修改隔离。事务查看数据时数据的所处的状态,要么是另一并发事务修改他之前的状态,要么是另一并发事务修改他之后的状态。事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使结束时的状态与原始事务执行的状态相同。

持久性

事务完成过后,它对于系统的影响是永久性的。

事务分类

显式事务

通过发送BEGIN TRANSACTION语句来显式启动事务。

自动提交事务

数据库引擎的默认模式。每个单独的T-SQL语句都在其完成后提交。不必指定任何语句来控制事务。

隐式事务

通过SET IMPLICIT_TRANSACTION ON语句,将隐式事务模式设置为打开。下一个语句自动启动一个新的事务。当该事务完成时,下一个T-SQL语句又将启动一个新的事务

管理事务

对于事务的管理是通过事务控制语句和几个全局变量结合起来实现的。

事务控制语句

开始事务

  1. BEGIN {TRAN|TRANSACTION}
  2. [<事务名> [WITH MARK ['描述的字符串']]]

WITH MARK [‘描述的字符串’]:指定日志中标记事务。如果指定了WITH MARK必须指定事务名。

提交事务

当一个成功的显示或者隐式事务结束时,需要使用COMMIT TRANSACTION语句提交事务

  1. COMMIT {TRAN|TRANSACTION} <事务名>

设置保存点

可以在事务内部设置保存点,以便于回滚事务时回滚到某个保存点。

  1. SAVE {TRAN|TRANSACTION} <保存点名>

回滚事务

当需要将显式事务或隐式事务回滚到事务的起点或事务的某个保存点时

  1. ROLLBACK {TRAN|TRANSACTION}
  2. [<事务名>|<保存点名>]

可用于事务管理的全局变量

@@ERROR

给出最近一次执行的出错语句引发的错误号,返回值为0表示未出错

@@ROWCOUNT

给出受事务中已执行语句所影响的数据行数

事务例子

  1. BEGIN TRAN
  2. 第一段T-SQL语句
  3. SAVE TRAN 第一个保存点
  4. 第二段T-SQL语句
  5. IF @@ERROR<>0
  6. ROLLBACK TRAN 第一个保存点
  7. COMMIT TRAN

注意事项

尽可能缩短事务的时间,事务执行时间长会使其他必须等待访问相关数据的事务等待较长的时间。而且事务最好不要嵌套使用。