Jac*_*son 6 mysql database web-services transactions nested-transactions
有没有人有经验可以使用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;
Run Code Online (Sandbox Code Playgroud)
但即使在这里也许会有一个更好(或至少更常见)的习语?可以OrdersAuditInfo在一个完全不同的事务中执行插入,但是保证除非最终实际工作之外没有写入OrdersAuditInfo表,这将是很好的.COMMIT
我通常倾向于避免保存点,因为它会使代码很难理解和验证。
在您发布的情况下,包装在单个事务中将取决于您的业务规则是否OrdersAudit包含与 , 完全对应的记录。Orders
编辑:只需重新阅读您的问题,您不需要保证OrdersAudit和之间的对应关系Orders。所以我不会使用任何事务来插入记录OrdersAudit。
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |