【问题标题】:Immidate command during MySQL TransactionMySQL事务期间的立即命令
【发布时间】:2013-08-31 09:23:59
【问题描述】:

在注册过程中,我使用事务来封装帐户设置中涉及的所有操作,以便在出现问题时可以回滚。

发生的最后一项是计费过程,如果付款成功,则调用 Commit 操作以完成帐户创建,如果说用户的卡被拒绝,我会回滚。

但是,我想知道最好的方法是将尝试计费的日志写入数据库,而该特定写入操作不会被保护其他数据库操作的事务“覆盖”。这在 MySQL 中可能吗?有问题的日志表不依赖于任何其他表。由于在我们开始使用交易之前创建的遗留支付库,在回滚操作之后保留应用程序中的数据以将其写入有些困难。如果 MySQL 有解决方案,我想避免这种情况。

【问题讨论】:

    标签: mysql transactions payment-processing


    【解决方案1】:

    我不会出于这个目标而使用交易。您描述的操作似乎完全有权独立存在。

    例如,发票有一个抬头和一个或多个行。您使用事务来确保您不会在数据库中存储不完整的发票,因为这将是一个应用程序错误:在业务逻辑中没有您拥有的情况,例如没有标题的行。

    但是,从业务逻辑的角度来看,拥有一个未经确认的帐户是完全合理的。客户可能更愿意了解情况并能够提供另一种付款方式,而不是重新开始。

    此外,在如此冗长的过程中使用事务需要保持与 MySQL 服务器的开放连接。如果您需要实现 HTTP 接口,则必须重新考虑整个逻辑。

    简而言之,事务是防止应用程序错误的工具,而不是实现业务逻辑的机制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      相关资源
      最近更新 更多