我目前有一個 SQL 寫入操作的重試策略。
我的問題是,如果操作不是冪等的,這有關系嗎?
我一直認為,如果出現例外并重試操作,則意味著最初的嘗試沒有通過,因此是否冪等無關緊要。
如果它確實重要,我應該在 sql 程序中尋找什么來確定它們是否是冪等的。
謝謝 !
uj5u.com熱心網友回復:
假設重試是由 DB 引擎引起的(即它是 JDBI 或 JOOQ 或諸如此類的沒有拾取 SQLException,看到它是 db 引擎告訴您重試,并且 JDBI/JOOQ 重新啟??動您的代碼塊),是的,當然。這意味著事務已中止,并且您在 SQL 中撰寫的任何修改任何內容的內容都將無效。
但是,請注意某些 SQL 陳述句存在于事務之外。通常,“模型定義”而不是“資料定義”的任何內容都不屬于事務。如果不以INSERT
, UPDATE
,SELECT
或開頭DELETE
,則可能它超出了事務模型,因此沒有被“中止”。ALTER TABLE
, CREATE VIEW
, TRUNCATE someTable
, DROP USER
, USE someNamespace
, SET something
- 這些通常不是事務性的。如果您要求,某些資料庫引擎可以使它們成為事務性的,例如CREATE TABLE TRANSACTIONAL
在 h2 中。我不知道有什么開箱即用的。
我會假設您使用的任何資料庫引擎或框架都不會重試,除非發生專門指示它的 SQLException。如果發生任何其他例外,或者發生不意味著“重試”的 SQLException,則事務將中止,您的“代碼塊”退出,并且傳播例外。如果不知何故這不是它的作業方式 - 那么你沒有任何保證。然而,這對于如何與資料庫互動來說是一個相當奇怪的看法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/506683.html