3

Mysql で 2 つの異なるデータベースにトリガーを作成する方法はありますか? 私の要件は次のようなものです:-

database: test1 -> table: tmp1
database: test2 -> table: tmp2

ここで、test1 でトリガーを使用する必要があります。挿入操作は tmp1 で行われ、test2 データベースの tmp2 に値を挿入する必要があります。また、副詩。つまり、tmp2 に挿入してから test1 データベースの tmp1 テーブルに挿入すると、test2 データベースの tmp2 テーブルでもう 1 つのトリガーが実行されます。

両方にトリガーを書き込もうとしましたが、他のテーブルを挿入するためにループに入ると思います。

DELIMITER $$
CREATE TRIGGER trigger_ad_t1 AFTER insert ON `test1`.tmp1 
FOR EACH ROW
Begin
  INSERT INTO `test2`.tmp2 VALUES (NEW.employeeNumber,New.fname,New.lname)
END$$
DELIMITER ;

tmp2 テーブルへの挿入後に tmp1 への挿入用に記述された同じタイプのトリガー。

もう1つ、mysql 5.1.63を搭載したローカルPCでこのトリガーをテストしましたが、mysql 5.0.45を搭載したテストサーバーでこのトリガーを試行すると、構文エラー(1064)が発生します。何が問題なのかわからない?

アップデート:

デリメータ付 区切りなし

誰でもそれを取り除くのを手伝ってもらえますか。

ありがとう

4

1 に答える 1

1

トリガーで完全修飾テーブル名を使用します。
つまり
db1.test1.*d2.test2.*

PS もう一度 SQL を確認したところ、既に上記のことを行っている ことがわかりました。

編集:コメントフィールドは郵便番号に制限されているため、無限の挿入ループを防ぐ方法は次のとおりです(employeeNumberが一意のキーであると仮定):

編集されたコード:

IF NOT EXISTS(SELECT employeeNumber FROM otherDB.otherTable WHERE employeeNumber = NEW.employeeNumber) THEN
INSERT INTO otherDB.otherTable VALUES (NEW.employeeNumber,New.fname,New.lname)
END IF;

最初に提供されたコードで修正が必要でした: ... EXISTS(SELECT * FROM otherDB.otherTable ...)is に置き換えられました。理由は、内部クエリが常に結果の数を含む 1 つのレコードを返すため
... EXISTS(SELECT employeeNumber FROM otherDB.otherTable ...)
、最初のクエリが常に返されるためです =>は常にtrueSELECT * FROM ...
EXISTS(SELECT * FROM ...)true

于 2012-09-21T08:26:49.430 に答える