有没有人可以分享使用 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
确实有效。
最佳答案
我通常倾向于避免保存点,因为它会使代码很难理解和验证。
在您发布的情况下,包裹在单个交易中将取决于 OrdersAudit
记录是否与 Orders
完全对应,是您业务规则的一部分。
编辑:只需重新阅读您的问题,您不需要保证 OrdersAudit
和 Orders
之间的对应关系。所以我不会使用任何事务来插入 OrdersAudit
记录。
关于mysql - MySQL 保存点在 Web 服务中的实际应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/591897/