我正在尝试使用java来模拟一个数据库恢复子系统。然而,我有以下问题。
无论何时发出begin transaction,是否总是需要有一个end transaction?(如下例所示)
b1 --- Begin txn 1
r1(X) --- Read item X using txn 1
e1 --- End txn 1根据上面的示例,我不会发出Commit transaction语句。那么,我的事务是成功还是失败呢?如果上面的例子如下所示,
b1 --- Begin txn 1
r1(X) --- Read item X using txn 1
c1 --- commit txn 1end和commit的区别是什么?
如果您需要更多信息,请告诉我。
发布于 2013-02-11 13:46:46
你要么回滚一个事务,要么提交一个事务,我希望你没有把它与BEGIN和END块混淆,后者既不是事务,也不是事务。
我相信大多数数据库...不过,它仍然以回滚或提交结束。
希望这能有所帮助。
发布于 2013-02-11 14:29:35
BEGIN/END对代码块进行定界,而不控制事务。如果不在事务中,则每个语句将在一个自主事务中执行。通常,BEGIN/END与分支/循环指令(IF/WHILE)一起使用。
BEGIN TRANSACTION / COMMIT TRANSACTION表示事务的开始:此块中的每个语句都在同一事务中执行,不能单独提交或回滚。
发布于 2013-02-11 13:48:58
对于来自程序内部的SQL事务,END语句只需关闭事务即可。这意味着事务已经完成,不应该再发生任何事情。COMMIT语句实际上告诉数据库您希望事务更改是永久的。
如果处于“自动提交”模式,则不需要COMMIT语句,因为每个查询/语句都应该提交。
有关提交的更多信息,请访问here。
如果您正在使用ODBC进行数据库连接,则可以在here中找到有关事务管理的信息。
另外,这个question之前也被问过。
https://stackoverflow.com/questions/14806435
复制相似问题