我正在尝试使用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
结束和提交有什么区别?
如果您需要更多信息,请与我们联系。
答案 0 :(得分:12)
要么ROLLBACK一个Transaction或COMMIT一个Transaction.I希望你不要把它与BEGIN和END块混淆,这不是一个交易,而且根本不涉及Transaction。
我相信大多数数据库......它仍然以ROLL BACK或COMMIT结束。
希望这有帮助。
答案 1 :(得分:2)
BEGIN/END
分隔代码块,而不控制事务。如果尚未在事务内部,则每个语句将在自治事务中执行。通常,BEGIN/END
与分支/循环指令(IF/WHILE
)一起使用。
BEGIN TRANSACTION / COMMIT TRANSACTION
表示事务的开始:此块中的每个语句都在同一事务中执行,不能单独提交或回滚。
答案 2 :(得分:0)
'结束'用于结束过程/功能。执行该语句很重要。
“提交”用于永久保存交易中的所有更改
例如,您使用SQL语句创建或删除了表,您需要提交更改
请在此处阅读有关承诺声明的更多信息
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4010.htm
答案 3 :(得分:0)
对于来自类似程序内部的SQL事务,END语句只是关闭事务。意味着交易已经完成,不应再发生任何事情。 COMMIT语句实际上告诉数据库您希望事务更改为PERMANENT。
如果您处于“自动提交”模式,则不需要COMMIT语句,因为每个查询/语句都应该提交。
有关COMMIT的更多信息,请访问here。
如果您使用ODBC进行数据库连接,可以找到有关事务管理的信息here。
之前也曾问过这个question。
答案 4 :(得分:0)
开始和结束事务的确切命令名称取决于您使用的特定数据库(不幸的是)。
例如:
在SQLite中,您使用BEGIN / BEGIN TRANSACTION开始,并使用END / END TRANSACTION / COMMIT / COMMIT TRANSACTION结束交易。
在MySQL中,您使用START TRANSACTION / BEGIN / BEGIN WORK和COMMIT / COMMIT WORK。
答案 5 :(得分:-1)
有关详细信息,请参阅此LINK
QUOTE: BEGIN TRANS和END TRANS开始和结束交易。他们不指定新的代码块;它们只标记交易边界。