我有嵌套事務威爾父事務太失敗了,如果嵌套事務失敗
db.beginTransaction();
try {
deleteCustomer();
insert_customer_function();
// No exception throw. Success
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
void insert_customer_function() {
db.beginTransaction();
try {
insertCustomer();
// Exception throw somehow...
db.setTransactionSuccessful();
} catch (Exception ex) {
} finally {
db.endTransaction();
}
}
我在想,會deleteCustomer
被COMMITED,或回滾,如果嵌套事務insert_customer_function
失敗的碼?
從https://www.sqlite.org/lang_savepoint.html,看來
注意,內部交易可能提交(使用RELEASE 命令),但後來有其工作由ROLLBACK在外部 交易撤銷。電源故障或程序崩潰或操作系統崩潰將導致 回滾最外層事務,撤消在外層事務中發生的所有 更改,甚至包含 被認爲已由RELEASE命令「提交」的更改。內容不是 實際上在磁盤上提交,直到提交最外面的事務 。
似乎
- 如果外不承諾,即使內承諾,兩個外&內將回滾。
但是,如果,
- 如果外犯,但內不提交,都將外&內將回滾?
Thx。在這種情況下,你的意思是「如果外部提交,但內部不提交,外部和內部都將回滾? - 否」? –
我的意思是這樣的:如果inner不提交,outer將會收到inner引發的錯誤。因此,outer會捕獲異常並且不會提交。您需要將** catch **添加到外部,以捕獲在回滾情況下由內部拋出的異常。 –
因此,如果我不會從insert_customer_function中拋出異常,那麼可能會因爲deleteCustomer將被提交而導致空表結束。 –