正如此Stackoverflow answer和this网站所述,每个commit()
调用是否都会隐式启动给定setAutoCommit(false)
的另一个事务处理块?
答案 0 :(得分:3)
这取决于。 JDBC规范允许驱动程序确定何时开始新事务,因此您无法对此进行概括。驱动程序可能会在commit()
/ rollback
或setAutoCommit(false)
之后直接启动新事务,但如果很多驱动程序确实这样做,我会感到惊讶。
特别是JDBC 4.2(第10.1节)说(强调我的):
何时启动新事务是由JDBC驱动程序或基础数据源隐式做出的决策。尽管某些数据源实现了显式的“begin transaction”语句,但是没有JDBC API可以这样做。 通常,当前SQL语句需要一个并且没有任何事务处理时,就会启动一个新事务。
只有在真正需要时才启动事务会更有效,并且过早启动事务会妨碍数据的可见性(取决于隔离级别)。我假设(但尚未验证)这是大多数司机所做的事情。