2013-07-17 56 views
1

我需要一些建議。事務回滾後該怎麼辦

開始交易後有回滾時最好做什麼?

  • 執行,其餘的網站
  • 殺完整的網站,並顯示一條錯誤消息。

謝謝!

+0

有沒有關於該主題的深入資源?我通常看到的模式是:1)開發人員對交易沒有任何意義2)開發人員只是在沒有考慮的情況下編寫提交/回滾3)有一天,開發人員希望注意到他/她正在使用的DBMS不是事務性的(即MyISAM)。似乎太少的人確實知道如何處理事務回滾。 – Gzorg

回答

0

這真的取決於你想要做什麼。

但是:

  • 你不想只是把原始的錯誤消息在用戶面前,它應該是有意義的。
  • 有意義的消息應該與頁面其餘部分具有相同的外觀和感覺,而不僅僅是具有黑色書寫的白色頁面。
  • 它應該包含某種導航,所以用戶可以從錯誤中恢復。
  • 如果它是一個表單,那麼用戶可能會重新嘗試,然後儘可能多的數據應該仍然以不重複工作的形式存在。
+0

謝謝,以及我正在考慮完全停止運行(退出();)的網站,因爲那樣我就知道數據庫不會被搞砸了! – Jordy

+2

@Jordy相反,事務應該保持數據庫不處於不一致的狀態,所以你不需要立即退出()。至少告訴最終用戶發生了一些事情。 –

+0

這是我正在處理的問題。希望你能幫我! http://stackoverflow.com/questions/17708401/optimize-transactions-in-my-files – Jordy

0

這真的取決於爲什麼MySQL ROLLBACK聲明發布。應用程序有發佈它的原因,所以應用程序應該具有該條件集的代碼路徑。

通常情況下,當某些條件導致無法繼續前進時會調用ROLLBACK。所以,這通常是作爲中止來完成的。 「殺死整個網站」聽起來有點激烈。如果此事務是某些用戶交互的結果,則要做的禮貌事情就是向用戶顯示一條消息「您的請求遇到問題,請稍後再試。」 (沒有理由向用戶顯示堆棧跟蹤)

而應用程序應該將錯誤條件的詳細信息記錄到日誌中,包括用戶的身份和某種事務標識,堆棧跟蹤,和任何其他相關信息,供分析。

+0

這是我正在處理的問題。希望你能幫我! http://stackoverflow.com/questions/17708401/optimize-transactions-in-my-files – Jordy