私は2つのサービスを持っており、DBテーブルに同期を維持したいと思います。そして、service2がtable2を更新したら、table1も更新したいと思います。1つのテーブルにトリガを書き込んでテーブル2を更新し、テーブル2をトリガしてテーブル1を更新する
table1を更新するためにtable1にトリガを書き込んだり、table2を更新してtable2を更新したりすることはできますか?これはループを作りますか?
私は2つのサービスを持っており、DBテーブルに同期を維持したいと思います。そして、service2がtable2を更新したら、table1も更新したいと思います。1つのテーブルにトリガを書き込んでテーブル2を更新し、テーブル2をトリガしてテーブル1を更新する
table1を更新するためにtable1にトリガを書き込んだり、table2を更新してtable2を更新したりすることはできますか?これはループを作りますか?
table2を更新するためにtable1にトリガーを書き込んだり、再びtable1を更新するtable2のトリガー を書き込むことはできますか?これはループを作りますか?
これは、サーバーのオプションnested triggers
nested triggers
オプションを制御トリガの後 カスケードできるかどうかに依存します。つまり、別のトリガーを開始するアクションを実行します。 は、別のトリガーを開始します。ネストされたトリガーが が0に設定されている場合、AFTERトリガーはカスケードできません。 ネストされたトリガーが (デフォルト)に設定されている場合、AFTERトリガーはレベルを32 までカスケードできます。 INSTEAD OFトリガーは、 このオプションの設定に関係なくネストできます。
しかし、あなたは、とにかく最初のステートメントとして、あなたのトリガでは、このコードを書くカスケード避けることができます。
IF TRIGGER_NESTLEVEL() > 1 RETURN;
あなたは、両方のテーブルを非表示に更新可能なビューを作成しない限り、二つのテーブルに1つのトリガーをリンクする方法はありませんこのビューで動作するようにすべてのアプリケーションコードをマップします。しかし、このソリューションは、最初から新しいアプリケーションを開発する際に役立ちます。 –
これは最高のデザインのようには見えません - 同時に1つのテーブルまたは両方の更新があります。しかし、あなたがそれを行うことができない場合は、トリガーにチェックを追加し、値が異なる場合にのみ更新することができます。そうしないと、ループに終わる可能性があります – dbajtr