2013-07-17 55 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