有没有人有经验可以使用MySQL 保存点(直接或通过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