为什么mysql jdbc不使用“start transaction”查询来启动事务?

yftpprvb  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(550)

我有一个java应用程序,它使用jta(apachegeronimo)来管理事务。正在使用的数据库是mysql。app有很多begin和commit方法。但是,查看mysql常规日志,我找不到一个“start transaction”查询/命令。日志中充满了 SET autocommit=1 以及 SET autocommit=0commit 以及 rollback . 因此,查看日志我无法确定事务是在什么时候开始的。我不是一个java的家伙,我也找不到任何有帮助的资源。

htzpubme

htzpubme1#

mysql的jdbc驱动程序实现了javajdbcapi。java.sql.connection接口没有启动事务的方法。
执行sql查询时,事务隐式开始。
如果驱动程序处于自动提交模式,则在sql查询完成后,事务将自动提交。
如果驱动程序未处于自动提交模式,则由查询启动的事务将保持活动状态,直到调用 Connection.commit() 或者 Connection.rollback() .
另请参见如何在jdbc中启动事务?

yk9xbfzb

yk9xbfzb2#

在mysql innodb中使用start transaction和commit语句。但在mysql myisam中,这些命令无效,因此需要使用 set autocommit = 0 而不是启动事务和 set autocommit = 1 代替 commit ; innodb允许这两种方式,但是myisam只允许设置autocommit。另外,请注意,这些命令执行的工作有些类似,但它们并不完全相同。在innodb中不建议使用set autocommit。有关更多信息,请参阅stackoverflow中的此问题。

相关问题