【发布时间】:2009-02-26 18:46:05
【问题描述】:
有没有人可以分享使用 MySQL savepoints(直接或通过 ORM)的经验,尤其是在一个重要的 Web 服务中?你在哪里实际使用过它们?它们是足够可靠(假设您愿意运行相当新版本的 MySQL)还是太先进或太昂贵?
最后,有没有人有类似以下用例的经验,您是否使用过保存点?假设某些特定工作单元的要点是向Orders 表添加一行(当然,不必与订单相关)并在同一事务中更新OrdersAuditInfo 表.如果可能的话,必须更新Orders,但OrdersAuditInfo 表不是必需的(例如,可以只将错误记录到文件中,但继续执行整个事务)。在低级别它可能看起来像这样(警告,伪 SQL 如下):
BEGIN;
INSERT INTO Orders(...) VALUES (...);
/* Do stuff outside of SQL here; if there are problems, do a
ROLLBACK and report an error (i.e., Order is invalid in this
case anyway). */
SAVEPOINT InsertAudit;
INSERT INTO OrdersAudit(...) VALUES(...);
/* If the INSERT fails, log an error to a log file somewhere and do: */
ROLLBACK TO SAVEPOINT InsertAudit;
/* Always want to commit the INSERT INTO Orders: */
COMMIT;
但即使在这里,也许会有更好(或至少更常见)的成语?可以在完全不同的事务中执行OrdersAuditInfo 插入,但最好保证OrdersAuditInfo 表不被写入,除非最终的COMMIT 确实有效。
【问题讨论】:
标签: mysql web-services transactions nested-transactions