繁体   English   中英

每个对JDBC commit()的调用是否都隐式标记了事务块的开始?

[英]Does each call to JDBC commit() implicitly mark the start of a transaction block?

就像这个Stackoverflow答案这个网站中所述,在setAutoCommit(false)给定的情况下,每个commit()调用是否隐式启动另一个事务块?

这取决于。 JDBC规范允许驱动程序确切地决定何时启动新事务,因此您不能对此一概而论。 一个驱动程序可能会在commit() / rollbacksetAutoCommit(false)之后立即开始一个新事务,尽管如果很多驱动程序实际执行该操作,我会感到惊讶。

JDBC 4.2(第10.1节)特别指出(强调我的意思):

何时开始新事务是由JDBC驱动程序或基础数据源隐式做出的决定。 尽管某些数据源实现了显式的“开始事务”语句,但没有JDBC API可以这样做。 通常,当当前的SQL语句需要一个新的事务并且没有适当的事务时,就会启动一个新的事务。

仅在确实必要时才启动事务,这样效率更高,而过早启动事务将影响数据的可见性(取决于隔离级别)。 我假设(但尚未验证)大多数驱动程序都在这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM