【问题标题】:java- possible to call rollback function after transaction is commited?java-提交事务后可以调用回滚函数吗?
【发布时间】:2018-12-07 04:19:01
【问题描述】:

我有一个程序,我可以从文件中提取单词并将这些单词插入 MySQL 的表中。

我的程序在文件中的所有单词都插入表后可以提交事务的情况下运行良好。如果在事务之间发生任何事情,则不会向表中插入任何内容,因为 autoCommit 设置为 false。

我想知道,一旦提交了事务,表中的记录是永久的,有没有办法撤消此类事务,如果有大量不同的事务,我如何设法撤消它们?

【问题讨论】:

  • 你的问题不清楚。回滚不是UNDO,它旨在回滚部分完成的事务提交之前。希望它是 UNDO 并询问为什么它不是无效的。这不是回滚的定义方式。如果您想要 UNDO 功能,您必须自己提供。
  • 它旨在回滚部分完成的事务。所以在我的情况下,因为我在提交之前正在插入表,如果发生任何事情,这些记录根本不会被插入。你说的是这个吗?
  • 您可以将多个单独的操作分组到事务中。然后,您可以确保所有操作都以原子方式发生,或者都没有发生。事实上,回滚从未打算作为 UNDO 操作。

标签: java mysql


【解决方案1】:

如果提交成功,则完成,完成,此时您无法回滚。所以不应该这样做

编辑: 更清楚地说,如果 con.comit 失败,应在 catch 块中使用 con.rollback

【讨论】:

  • 所以无法撤销?
  • 为什么不呢,那么connection.rollback的目的是什么?
  • 当你调用 commit() 时,你完成/关闭了当前事务。因此,由于 rollback() 撤消了当前事务中的任何更改(根据 javadoc),它实际上什么都不做。
  • 我明白了。但是为什么 MYSQL 中的回滚工作方式不同,在您提交后,您可以运行 ROLLBACK 并撤消所有操作?
  • 你确定它的承诺
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 2012-12-24
相关资源
最近更新 更多