10

我正在尝试使用 java 模拟数据库恢复子系统。但是,我有以下问题。

每当发出开始交易时,是否总是需要有结束交易?(就像下面的例子)

b1    --- Begin txn 1
r1(X) --- Read item X using txn 1
e1    --- End txn 1

根据上面的示例,我没有发出 Commit 事务语句。那么,我的交易会成功还是失败?如果上面的例子,如下所示,

b1    --- Begin txn 1
r1(X) --- Read item X using txn 1
c1    --- commit txn 1

end 和 commit 有什么区别?

如果您需要更多信息,请告诉我。

4

6 回答 6

17

要么回滚事务,要么提交事务。我希望你不要将它与不是事务的 BEGIN 和 END 块混淆,与事务无关。

我相信大多数数据库....仍然以 ROLL BACK 或 COMMIT 结束。

希望这可以帮助。

于 2013-02-11T05:46:45.503 回答
3

BEGIN/END分隔代码块,而不控制事务。如果尚未在事务中,则每个语句将在自治事务中执行。通常BEGIN/END与分支/循环指令 ( IF/WHILE) 一起使用。

BEGIN TRANSACTION / COMMIT TRANSACTION表示事务的开始:该块内的每条语句都在同一个事务中执行,不能单独提交或回滚。

于 2013-02-11T06:29:34.797 回答
2

对于来自此类程序内部的 SQL 事务,END 语句只是关闭事务。这意味着交易已经完成,不再发生任何事情。COMMIT 语句实际上告诉数据库您希望事务更改是永久的。

如果您处于“自动提交”模式,则不需要 COMMIT 语句,因为应该提交每个查询/语句。

更多关于 COMMIT 的信息可以在这里找到。

如果您使用 ODBC 进行数据库连接,可以在此处找到有关事务管理的信息。

以前也有人问过这个问题。

于 2013-02-11T05:48:58.357 回答
0

“结束”用于结束过程/功能。执行语句很重要。
“提交”用于永久保存事务中的所有更改。
例如,您使用 SQL 语句创建或删除了一个表,您将需要提交更改。

在此处阅读有关提交声明的更多信息。
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4010.htm

于 2013-02-11T05:47:28.123 回答
0

开始和结束事务的确切命令名称取决于您使用的特定数据库(不幸的是)。

例如:

SQLite中,您使用 BEGIN / BEGIN TRANSACTION 开始,使用 END / END TRANSACTION / COMMIT / COMMIT TRANSACTION 结束事务。

MySQL中,您使用 START TRANSACTION / BEGIN / BEGIN WORK 和 COMMIT / COMMIT WORK 相同。

于 2014-07-20T13:58:18.290 回答
-1

详情请参考此链接

QUOTE: BEGIN TRANS 和 END TRANS 开始和结束一个事务。他们不指定新的代码块;它们只标记事务边界。

于 2013-02-11T06:18:22.360 回答