有沒有人有使用MySQL savepoints(直接或通過ORM)共享的經驗,尤其是在非平凡的Web服務中?你真的在哪裏使用它們?它們足夠可靠嗎(假設你願意運行一個相當新的MySQL版本),還是太過流血或昂貴?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
插入,但是如果除非最後的COMMIT
實際工作,否則可以保證OrdersAuditInfo
表格不是而是。
我之所以要OrdersAudit成爲整體交易的一部分,是因爲某些原因在訂單中插入訂單失敗。 – 2009-03-03 07:05:10