2013-08-28 87 views
1

在註冊過程中,我使用Transaction來封裝帳戶設置中涉及的所有操作,以便在發生問題時可以回退。MySQL交易期間的Immidate命令

發生的最後一項是計費過程,因此如果付款成功,則會調用Commit操作來完成帳戶創建,如果說用戶卡被拒絕,我會回滾。

但是,我想知道什麼是最好的方法是寫一個試圖計費的日誌到數據庫,而沒有特定的寫操作被保護其他數據庫操作的「事務」覆蓋。這在MySQL中可能嗎?有問題的日誌表不依賴於其他任何人。由於在我們開始使用事務之前創建了傳統的支付庫,因此在回滾操作後繼續寫入應用程序中的數據有點困難。如果MySQL有解決方案,我想避免這種情況。

回答

2

我不會在考慮該目標時使用交易。您所描述的操作似乎完全有權獨立存在。

例如,發票有一個標題和一行或多行。您使用交易來確保您不會在數據庫中存儲不完整的發票,因爲這會是一個應用程序錯誤:您沒有業務邏輯中的情況,例如,一個沒有標題的行。

但是,從業務邏輯的角度來看,擁有未經確認的帳戶是非常有意義的。客戶可能更願意瞭解情況並能夠提供另一種付款方式,而不是重新開始。

此外,對於如此漫長的過程使用事務需要保持與MySQL服務器的開放連接。如果你需要實現一個HTTP接口,你將不得不重新思考整個邏輯。

總之,事務是防止應用程序錯誤的工具,而不是實現業務邏輯的機制。