0

私は2つのテーブルを持っています:

複数の列を持つテーブル A と 2 つの列を持つテーブル B。

テーブル A に新しい行を挿入した後にやりたいことは次のとおりです。

  1. テーブル A - 列 Cに挿入された値が既にテーブル Bにあるかどうかを確認します
  2. 値がテーブル Bにない場合は、テーブル A - 列 Cのデータをテーブル B - 列 Bに挿入し、テーブル B - 列 C の値を 1 に設定します。
  3. 表 A - 列 Cの値が既に表 Bに存在する場合は、ROW を見つけて、表 B - 列 C の値を 1増やします。

私はこれに対する解決策を見つけることができないので、誰かが助けてくれることを願っています.

ご協力いただきありがとうございます。

4

1 に答える 1

0

以下は Oracle の構文なので、誰かがこれを MYSQL に変換する必要があります。トリガーで行われる作業は常に最小限に抑える必要があるため、これを行う別の方法を見つけたいと思うかもしれないという他のライターの意見は正しいです。

列への参照がわかりにくいので、列名を FK と PK に置き換えています。

CREATE OR REPLACE TRIGGER tablea
   AFTER INSERT OR DELETE
   ON tablea
   REFERENCING NEW AS new OLD AS old
   FOR EACH ROW
BEGIN

   IF INSERTING
   THEN

      UPDATE tableb
         SET cnt   = cnt + 1
       WHERE fk = :new.pk;

      IF SQL%ROWCOUNT = 0
      THEN

         INSERT INTO tableb (
                        fk, cnt
                     )
              VALUES (:new.pk, 1);

      END IF;

   END IF;

   IF DELETING
   THEN

      UPDATE tableb
         SET cnt   = cnt - 1
       WHERE fk = :old.pk;

   END IF;

END;
于 2013-11-08T16:54:29.400 に答える