SQL Anywhere 期望您将命令组合到事务中。您提交事务以使对数据库进行的更改成为永久更改。更改数据时,所做的更改会记录在事务日志中,直到输入 COMMIT 命令后才成为永久更改。
事务起始于以下事件之一:
在与数据库连接后执行的第一个语句。
在事务结束后执行的第一个语句。
以下事件之一将完成事务:
执行 COMMIT 语句使对数据库进行的更改成为永久更改。
执行 ROLLBACK 语句撤消由事务执行的所有更改。
执行具有自动提交副作用的语句:数据定义命令(如 ALTER、CREATE、COMMENT 和 DROP)都具有自动提交副作用。
与数据库断开连接将执行隐式回退。
ODBC 和 JDBC 具有一个自动提交设置,可以在每个语句后强制执行 COMMIT 命令。缺省情况下,ODBC 和 JDBC 要求将自动提交设置为 ON,并且要求每个语句都是一个事务。如果要利用事务设计的各种可能性,则应关闭自动提交设置。
有关自动提交的详细信息,请参见设置自动提交或手工提交模式。
将 chained 数据库选项设置为 Off 与在每个语句后强制自动提交类似。缺省情况下,那些使用 jConnect 或 Open Client 应用程序的连接已将 chained 设置为 Off。
有关详细信息,请参见设置自动提交或手工提交模式和chained 选项 [兼容性]。
Interactive SQL 提供两个选项,可用来控制事务结束的时间和方式:
如果您将 auto_commit 选项设置为 On,则 Interactive SQL 将自动在成功执行每一语句后提交您的结果,并且自动在每一失败的语句后执行 ROLLBACK。请参见auto_commit 选项 [Interactive SQL]。
commit_on_exit 选项的设置控制退出 Interactive SQL 时对未提交的更改执行的操作。如果该选项设置为 On(缺省设置),则 Interactive SQL 执行 COMMIT 语句;否则,它会用 ROLLBACK 语句撤消未提交的更改。请参见commit_on_exit 选项 [Interactive SQL]。
缺省情况下,ODBC 在自动提交模式下工作。即使已在 Interactive SQL 中将 auto_commit 选项设置为 Off,ODBC 的设置也将替换 Interactive SQL 的设置。可以使用 SQL_ATTR_AUTOCOMMIT 连接属性更改 ODBC 的设置。ODBC 自动提交与 chained 选项无关。
SQL Anywhere 也支持 Transact-SQL 命令(例如 BEGIN TRANSACTION),以便和 Sybase Adaptive Server Enterprise 兼容。有关详细信息,请参见Transact-SQL 兼容性。
TransactionStartTime 数据库属性返回数据库在 COMMIT 或 ROLLBACK 操作后第一次修改的时间。可以使用此属性查找所有活动连接的最早事务的开始时间。例如:
BEGIN DECLARE connid int; DECLARE earliest char(50); DECLARE connstart char(50); SET connid=next_connection(null); SET earliest = NULL; lp: LOOP IF connid IS NULL THEN LEAVE lp END IF; SET connstart = CONNECTION_PROPERTY('TransactionStartTime',connid); IF connstart <> '' THEN IF earliest IS NULL OR CAST(connstart AS TIMESTAMP) < CAST(earliest AS TIMESTAMP) THEN SET earliest = connstart; END IF; END IF; SET connid=next_connection(connid); END LOOP; SELECT earliest END |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |