5

データベースはMySQLです。新しい評価が配置されるたびに集計評価テーブルを更新するトリガーを実装しようとしています。次に、トリガーの実装を検討している他の同様のユースケースがいくつかあります。

これらのトリガーは、フェデレーションテーブルを更新している可能性があります。だから私の質問は: 新しい評価を挿入するphpスクリプトがphpスクリプトが完了する前にトリガーが完了するのを待つ必要があるかどうかです。

PS:トリガーはロジックを配置するのは良い考えではないことを理解しています。また、 RabbitMQなどのメッセージングを使用したほうがよいかもしれません。

4

1 に答える 1

13

トリガーは同期的です。それらを生成したINSERT/UPDATE / DELETEは、トリガーが実行するアクション(およびそれらのアクションによって生成される後続のトリガーも含む)の実行が完了するまでブロックします。

トリガーはアトミックです。つまり、トリガーによって実行された変更が失敗した場合、トリガーは失敗し、トリガーを生成した変更もキャンセルされます。

トリガーは、トリガーを生成したのと同じトランザクションのスコープも変更します。したがって、トリガーによって行われた変更は、トリガーを生成した変更とともにコミット/ロールバックできます。PHPアプリがトランザクションを終了して終了する間、トリガーが実行され続けた場合、そのトランザクションでトリガーが確実に発生するようにする方法はありません。

これは、BEFOREトリガーとAFTERトリガーの両方に適用されます。すべてのトリガーが終了するまで、アプリはブロックされます。

于 2012-02-04T23:08:51.190 に答える