6

有沒有人有使用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表格不是而是

回答

1

我通常傾向於避免SAVEPOINT,因爲它可能使代碼很難理解和驗證。

在您發佈的情況下,在單個交易中進行折扣取決於OrdersAudit記錄是否與Orders完全對應,是您業務規則的一部分。

編輯:只需重新閱讀您的問題,並且您沒有保證OrdersAuditOrders之間的對應關係的要求。所以我不會使用任何交易來插入OrdersAudit記錄。

+0

我之所以要OrdersAudit成爲整體交易的一部分,是因爲某些原因在訂單中插入訂單失敗。 – 2009-03-03 07:05:10

相關問題