我有两个表:

表A有多列,表B有两列。

在表A中插入新行后,我想做的是:


检查插入表A-C列中的值是否已在表B中
如果该值不在表B中,则将表A-C列中的数据插入表B-B列中,并将表B-C列设置为1
如果表B中已经存在表A-C列中的值,则找到ROW并将表B-C列中的值增加1


希望有人能提供帮助,因为我无法找到解决方案。

感谢您的任何帮助,您可以提供。

最佳答案

以下是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;

关于mysql - SQL触发器将值从表A-列A复制到表B-列A IF值在表B中是唯一的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19862650/

10-08 23:01