特に重要な Web サービスで、 MySQLセーブポイントを (直接または ORM 経由で)使用して共有できる経験がある人はいますか? 実際にどこで使ったことがありますか?それらは十分に信頼できますか (かなり最近のバージョンの MySQL を実行する意思があると仮定して)、それとも最先端または高価すぎますか?
最後に、次のユースケースのような経験をしたことがある人はいますか?そのためにセーブポイントを使用しましたか? ある特定の作業単位の主なポイントが、同じトランザクションでテーブルに行を追加しOrders
(もちろん、順序に関連する必要はありません)、テーブルを更新することであるとします。可能な限り更新するOrdersAuditInfo
ことは不可欠ですが、テーブルはそれほど重要ではありません (たとえば、エラーをファイルに記録するだけで問題ありませんが、トランザクション全体を続行できます)。低レベルでは、次のようになります (警告、疑似 SQL が続きます)。Orders
OrdersAuditInfo
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