DB2中与SQL Server Transactions相当的是什么?

9

以下是在DB2中相应于以下SQL Server语句的等效语句:

  • Begin Transaction - 开始事务
  • Commit Transaction - 提交事务
  • Rollback Transaction - 回滚事务

1
你可能需要在问题中澄清你是指LUW上的DB2还是z/OS或iSeries上的DB2。这可能会帮助一些偶然遇到此问题的人。 - Norman H
3个回答

20
其实答案比这里所示的要复杂一些。没错,事务是ANSI标准化的,而DB2可能支持它们。对于z/OS版本的DB2来说,它与其他变种(LUW、Linux-Unix-Windows最为常见)可能完全不同。冒着滑向抱怨的风险,这使得谈论DB2几乎没有意义。你谈论的是IBM数据库的某个特定变体,但在一个变体中起作用的东西在另一个变体中可能完全无效。我假设OP使用的任何版本都不是z/OS版,因为被接受的回答是“BEGIN TRANSACTION"。

对于那些在尝试使用DB2 z/OS的事务时遇到困难的人,以下是简要说明:主机版的DB2没有明确的事务。没有“BEGIN TRANSACTION”或任何可比较的结构。事务是隐式开始的(通常在文档中称为工作单元),需要显式提交或回滚(通常情况下,许多GUI工具(如Toad)都有自动提交功能,有时会给你带来麻烦)。

来自9.1 z/OS SQL参考手册(第28页;可在http://www-01.ibm.com/support/docview.wss?uid=swg27011656#manuals获取):

“应用程序进程启动时启动工作单元。如果前一个工作单元不是由应用程序进程结束,则还将启动一个工作单元。提交操作,全回滚操作或应用程序进程结束会结束工作单元。提交或回滚操作仅影响工作单元内所做的数据库更改。”

当编写脚本时,您可以手动指定保存点,这是最接近的类似事务的构造。保存点如下所示:
 SAVEPOINT A ON ROLLBACK RETAIN CURSORS;

 UPDATE MYTABLE SET MYCOL = 'VAL' WHERE 1;

 ROLLBACK WORK TO SAVEPOINT A;

表面上看起来,它们与显式事务类似,但实际上并不是。相反,它们只是在一个隐式事务中的时间点。对于许多目的来说,它们可能足够使用,但重要的是要意识到概念上的差异。


在处理 iSeries(AS/400)平台上的 DB2 时是否存在类似的问题?(对于这些系统来说,我是一个绝对的新手。) - Norman H
我对iSeries的版本不是很熟悉,但我认为答案是肯定的。版本5手册(http://www-01.ibm.com/support/docview.wss?uid=swg27008735;这是我能够最快找到的)在第23页引用了我上面引用的相同措辞。 - Michael

6
请参见这里以获取更多信息。但基本上,
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK

2
如果您使用像Intellij Idea(或其他)这样的IDE,则无法显式启动事务。换句话说,您无法在IDE控制台中输入“begin transaction”。

但是,您可以禁用“自动提交”(稍后重新启用它),然后在控制台中键入“commit”或“rollback”。

在IDEA中,还有一个“提交”按钮和一个“回滚”按钮。请参阅附加的屏幕截图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接