我有一个java应用程序,它使用jta(apachegeronimo)来管理事务。正在使用的数据库是mysql。app有很多begin和commit方法。但是,查看mysql常规日志,我找不到一个“start transaction”查询/命令。日志中充满了 SET autocommit=1 以及 SET autocommit=0 与 commit 以及 rollback . 因此,查看日志我无法确定事务是在什么时候开始的。我不是一个java的家伙,我也找不到任何有帮助的资源。
SET autocommit=1
SET autocommit=0
commit
rollback
htzpubme1#
mysql的jdbc驱动程序实现了javajdbcapi。java.sql.connection接口没有启动事务的方法。执行sql查询时,事务隐式开始。如果驱动程序处于自动提交模式,则在sql查询完成后,事务将自动提交。如果驱动程序未处于自动提交模式,则由查询启动的事务将保持活动状态,直到调用 Connection.commit() 或者 Connection.rollback() .另请参见如何在jdbc中启动事务?
Connection.commit()
Connection.rollback()
yk9xbfzb2#
在mysql innodb中使用start transaction和commit语句。但在mysql myisam中,这些命令无效,因此需要使用 set autocommit = 0 而不是启动事务和 set autocommit = 1 代替 commit ; innodb允许这两种方式,但是myisam只允许设置autocommit。另外,请注意,这些命令执行的工作有些类似,但它们并不完全相同。在innodb中不建议使用set autocommit。有关更多信息,请参阅stackoverflow中的此问题。
set autocommit = 0
set autocommit = 1
2条答案
按热度按时间htzpubme1#
mysql的jdbc驱动程序实现了javajdbcapi。java.sql.connection接口没有启动事务的方法。
执行sql查询时,事务隐式开始。
如果驱动程序处于自动提交模式,则在sql查询完成后,事务将自动提交。
如果驱动程序未处于自动提交模式,则由查询启动的事务将保持活动状态,直到调用
Connection.commit()
或者Connection.rollback()
.另请参见如何在jdbc中启动事务?
yk9xbfzb2#
在mysql innodb中使用start transaction和commit语句。但在mysql myisam中,这些命令无效,因此需要使用
set autocommit = 0
而不是启动事务和set autocommit = 1
代替commit
; innodb允许这两种方式,但是myisam只允许设置autocommit。另外,请注意,这些命令执行的工作有些类似,但它们并不完全相同。在innodb中不建议使用set autocommit。有关更多信息,请参阅stackoverflow中的此问题。