SQL触发器将值从表A - 列A复制到表B - 列A IF值在表B中是唯一的

时间:2013-11-08 15:27:49

标签: mysql sql triggers

我有两张桌子:

表A包含多列,表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 个答案:

答案 0 :(得分: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;