0

我有两张桌子:

表 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 回答 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 回答