2017-09-22 20 views
0

私は2つのサービスを持っており、DBテーブルに同期を維持したいと思います。そして、service2がtable2を更新したら、table1も更新したいと思います。1つのテーブルにトリガを書き込んでテーブル2を更新し、テーブル2をトリガしてテーブル1を更新する

table1を更新するためにtable1にトリガを書き込んだり、table2を更新してtable2を更新したりすることはできますか?これはループを作りますか?

+0

あなたは、両方のテーブルを非表示に更新可能なビューを作成しない限り、二つのテーブルに1つのトリガーをリンクする方法はありませんこのビューで動作するようにすべてのアプリケーションコードをマップします。しかし、このソリューションは、最初から新しいアプリケーションを開発する際に役立ちます。 –

+0

これは最高のデザインのようには見えません - 同時に1つのテーブルまたは両方の更新があります。しかし、あなたがそれを行うことができない場合は、トリガーにチェックを追加し、値が異なる場合にのみ更新することができます。そうしないと、ループに終わる可能性があります – dbajtr

答えて

1

table2を更新するためにtable1にトリガーを書き込んだり、再びtable1を更新するtable2のトリガー を書き込むことはできますか?これはループを作りますか?

これは、サーバーのオプションnested triggers

nested triggersオプションを制御トリガの後 カスケードできるかどうかに依存します。つまり、別のトリガーを開始するアクションを実行します。 は、別のトリガーを開始します。ネストされたトリガーが が0に設定されている場合、AFTERトリガーはカスケードできません。 ネストされたトリガーが (デフォルト)に設定されている場合、AFTERトリガーはレベルを32 までカスケードできます。 INSTEAD OFトリガーは、 このオプションの設定に関係なくネストできます。

しかし、あなたは、とにかく最初のステートメントとして、あなたのトリガでは、このコードを書くカスケード避けることができます。

IF TRIGGER_NESTLEVEL() > 1 RETURN; 
関連する問題