2

我有一个使用 JTA(Apache Geronimo)来管理事务的 Java 应用程序。使用的数据库是 MySQL。应用程序有很多开始和提交方法。但是查看 MySQL 常规日志,我找不到单个“开始事务”查询/命令。日志充满了SET autocommit=1SET autocommit=0和。因此,查看日志我无法确定交易的开始时间。我不是 Java 人,也找不到任何帮助资源。commitrollback

4

2 回答 2

6

MySql InnoDB 中使用了启动事务和提交语句。但在 MySQL MyISAM 中,这些命令无效,因此您需要使用set autocommit = 0Start Transaction 而set autocommit = 1不是commit; InnoDB 允许这两种方式,但 MyISAM 只允许设置自动提交。另外,请注意,这些命令执行的工作有些相似,但并不完全相同。并且在 InnoDB 中不推荐使用 set autocommit。有关更多信息,请参阅StackOverflow 中的此问题

于 2018-07-16T12:35:54.157 回答
2

MySQL 的 JDBC 驱动程序实现了 Java JDBC API。java.sql.Connection 接口没有启动事务的方法。

当您执行 SQL 查询时,事务会隐式开始。

如果驱动程序处于自动提交模式,则在 SQL 查询完成后自动提交事务。

如果驱动程序未处于自动提交模式,则由您的查询启动的事务将保持活动状态,直到您调用Connection.commit()Connection.rollback()

另请参阅如何在 JDBC 中启动事务?

于 2018-07-16T12:34:54.040 回答