簡體   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