2

明示的なトランザクション ブロック内の 2 つの関連するテーブルにエントリが追加される mysql データベースがあります。トランザクションが正常に終了したとき (そしてそのときだけ)、新しいデータについて別のプロセスに通知する必要があります。

これを実現するために、IPC を介して他のプロセスに通知する UDF を作成しました。また、テーブルの 1 つで AFTER INSERT トリガーを設定し、トリガーが UDF を呼び出します。

トランザクションが終了し、行が実際に挿入された後にトリガーが起動すると仮定しました。ただし、INSERT文が実行された直後に実行されるようです。

行が実際にデータベースにグローバルに挿入されるまで (つまり、COMMIT の後)、トリガー関数の実行を遅らせる方法はありますか?

回避策は、COMMIT の後に UDF を明示的に呼び出すことだと思いますが、自動化されたアプローチの方がはるかに優れています。

4

1 に答える 1

2

MySQL ドキュメントを見ると、トランザクションがコミットされた後に実行されるトリガーを定義することはできないようです。

理論的根拠は、DB に追加の変更を加えるためにトリガーが使用されることが多いため、データの整合性の問題を回避するために、ほとんどの場合、トリガーをトランザクション内で実行する必要があるためだと思います。

この動作は、Oracle などの他のデータベース システムでもサポートされているようですが、MySQL の使用に行き詰まっている場合は、UDF を手動で呼び出す必要があります。

于 2013-04-15T10:12:08.220 に答える