4

私はDjangoとMySQLを使用しています。Oracle で自律型トランザクションと呼ばれるもの、つまり、トランザクションの一部のみをコミットする (または、トランザクション内にトランザクションを持つ) ことができる必要があります。これは2つのケースで必要です(ただし、解決策は同じになると考えています):

  1. エラー ロギング。エラー テーブルにエラーを記録し、他のすべてのトランザクションをロールバックしたとしても、これらの挿入をコミットしたいと考えています。

  2. テーブルを使用してシーケンスを作成します (ここで説明されているように、TABLE シーケンスと LAST_INSERT_ID() を使用: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html )。このシーケンスを取得/更新し、ステートメントをコミットして、シーケンスを必要とする他のトランザクションのためにテーブルのロックを解除したいと考えています。他のトランザクションをロールバックしても、テーブルがインクリメントされれば問題ありません。

4

1 に答える 1

1

興味深い話題ですが、明らかに mysql にはそのようなものはありませんが、(ログ テーブルの問題のために) myisam テーブルを使用することをお勧めします。


この代替手段を見つけたので、2番目の回答を追加します。データベース内の別のユーザーとの別の接続からのログトランザクションを処理することができます。

Mysql はユーザーごとに接続プールを処理するため、メイン操作とログ操作に同じ接続を使用することはなく、ログ接続を個別にコミットできます。

于 2012-07-01T14:36:25.353 に答える