Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (A-D)

 

BEGIN TRANSACTION 语句 [T-SQL]

此语句用于开始用户定义的事务。

语法
BEGIN TRAN[SACTION] [ transaction-name ]
注释

可选参数 transaction-name 是指派给此事务的名称。它必须是有效的标识符。仅在最外层的嵌套 BEGIN/COMMIT 语句对或 BEGIN/ROLLBACK 语句对中使用事务名称。

在事务内部执行 BEGIN TRANSACTION 语句时,该语句会将事务嵌套级别增加一级。通过 COMMIT 语句可减少嵌套级别。当事务被嵌套时,只有最外层的 COMMIT 可使数据库更改永久生效。

Adaptive Server Enterprise 和 SQL Anywhere 都具有两种事务模式。

缺省的 Adaptive Server Enterprise 事务模式称为非链接模式,它单独提交每个语句,除非执行显式 BEGIN TRANSACTION 语句启动事务。相反,与 ISO SQL/2003 兼容的链接模式仅当执行显式 COMMIT 时或执行能完成自动提交的语句(如数据定义语句)时才提交事务。

通过设置 chained 数据库选项可以控制模式。在 SQL Anywhere 中,ODBC 和嵌入式 SQL 连接的缺省设置是 ON,这种情况下,SQL Anywhere 在链接模式下运行。(ODBC 用户还应该检查 AutoCommit ODBC 设置)。TDS 连接的缺省设置是 Off。请参见chained 选项 [兼容性]

在非链接模式下,事务在任何数据检索或修改语句前隐式启动。这些语句包括:DELETE、INSERT、OPEN、FETCH、SELECT 和 UPDATE。但仍必须用 COMMIT 或 ROLLBACK 语句显式结束事务。

不能在事务中变更 chained 选项。

小心

当调用存储过程时,应该确保它在要求的事务模式下正确运行。

当前嵌套级别保存在全局变量 @@trancount 中。在执行第一个 BEGIN TRANSACTION 语句前,@@trancount 变量的值为 0,而仅当 @@trancount 等于 1 时执行 COMMIT 才会对数据库进行永久更改。

没有事务名称或保存点名称的 ROLLBACK 语句总是将语句回退到最外层的 BEGIN TRANSACTION(显式或隐式)语句,并且取消整个事务。

权限

无。

副作用

无。

另请参见
标准和兼容性
  • SQL/2003   服务商扩充。

示例

以下批处理语句会报告 @@trancount 的连续值为 0、1、2、1 和 0。这些值显示在数据库服务器消息窗口上。

PRINT @@trancount
BEGIN TRANSACTION
PRINT @@trancount
BEGIN TRANSACTION
PRINT @@trancount
COMMIT
PRINT @@trancount
COMMIT
PRINT @@trancount

@@trancount 的值只可用于跟踪已发出的显式 BEGIN TRANSACTION 语句的数量。

当 Adaptive Server Enterprise 隐式启动事务时,会将 @@trancount 变量设置为 1。而当 SQL Anywhere 隐式启动事务时,不会将 @@trancount 变量值设置为 1。因此,在任何 BEGIN TRANSACTION 语句前(即使存在当前事务),SQL Anywhere @@trancount 变量的值均为 0,而在 Adaptive Server Enterprise(在链接模式下)中,该变量的值为 1。

对于使用 BEGIN TRANSACTION 语句启动的事务,在执行第一个 BEGIN TRANSACTION 语句之后,在 SQL Anywhere 和 Adaptive Server Enterprise 中,@@trancount 的值均为 1。如果事务使用其它语句隐式启动,然后执行 BEGIN TRANSACTION 语句,则执行 BEGIN TRANSACTION 语句后,在 SQL Anywhere 和 Adaptive Server Enterprise 中,@@trancount 的值均为 2。