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