1

MySQL のトリガーについて助けが必要です。私の推測では、それは非常に単純なはずです。3 つのテーブル (table1、table2、table3) で構成されるデータベースがあり、それぞれに 2 つの列 (column1、column2) があります。だからここに私が必要なものがあります。テーブル 1 に行が挿入された場合、それをテーブル 2 とテーブル 3 に自動的にレプリケートしたいと考えています。table2 と table3 の更新も同様です。しかし、ここにトリックがあります。行が既に存在するかどうかをチェックする if 条件に注意します。それ以外の場合、SQL はエラーをスローします。どんな助けにも本当に感謝しています。

4

1 に答える 1

0

エラーをスローしますか、それとも回避しますか?

最初のケースでは、次のようなことができます

IF EXISTS (SELECT 1 FROM table2or3 WHERE col1 = NEW.col1) THEN
   SIGNAL ...
END IF;

シグナルの詳細については、こちらをご覧ください。

エラーをスローしたくない場合は、次の可能性もあります

INSERT INTO foo(col1, col2) VALUES (NEW.col1, NEW.col2) 
ON DUPLICATE KEY UPDATE whatever = whatever;

ON DUPLICATE KEY UPDATE を指定し、UNIQUE インデックスまたは PRIMARY KEY で値が重複する行が挿入された場合、古い行の UPDATE が実行されます。

詳しくはこちらをご覧ください。

または

INSERT IGNORE ....

IGNORE キーワードを使用すると、INSERT ステートメントの実行中に発生したエラーは代わりに警告として扱われます。たとえば、IGNORE を使用しない場合、テーブル内の既存の UNIQUE インデックスまたは PRIMARY KEY 値を複製する行は、重複キー エラーを引き起こし、ステートメントは中止されます。IGNORE を使用すると、行はまだ挿入されませんが、エラーは発行されません。

詳しくはこちらをご覧ください。

于 2013-05-22T09:39:07.310 に答える