为什么MySQL JDBC不使用“启动事务”查询来启动事务?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么MySQL JDBC不使用“启动事务”查询来启动事务?相关的知识,希望对你有一定的参考价值。
我有一个Java应用程序,它使用JTA(Apache Geronimo)来管理事务。正在使用的数据库是mysql。 App有很多开始和提交方法。但是看看MySQL通用日志,我找不到一个“启动事务”查询/命令。日志充满了SET autocommit=1
和SET autocommit=0
与commit
和rollback
。因此,查看日志我无法确定交易开始的时间点。我不是一个Java人,我也找不到任何帮助资源。
在MySql InnoDB中使用了启动事务和提交语句。但在MySQL MyISAM中,这些命令无效,因此您需要使用set autocommit = 0
而不是Start Transaction和set autocommit = 1
来代替commit
; InnoDB允许这两种方式,但MyISAM只允许设置自动提交。另请注意,这些命令执行的工作有些类似,但它们并不完全相同。并且不建议在InnoDB中使用set autocommit。有关更多信息,请参阅StackOverflow中的this question。
MySQL的JDBC驱动程序实现了Java JDBC API。 java.sql.Connection interface没有开始交易的方法。
执行SQL查询时,事务会隐式开始。
如果驱动程序处于自动提交模式,则在SQL查询完成后将自动提交事务。
如果驱动程序未处于自动提交模式,则查询启动的事务将保持活动状态,直到您调用Connection.commit()
或Connection.rollback()
。
另见How to start a transaction in JDBC?
以上是关于为什么MySQL JDBC不使用“启动事务”查询来启动事务?的主要内容,如果未能解决你的问题,请参考以下文章