我有两张桌子:
表 A 有多列,表 B 有两列。
在表 A 中插入新行后我想做的是:
- 检查插入到表 A - 列 C中的值是否已经在表 B中
- 如果值不在表 B中,则将表 A - 列 C中的数据插入表 B - 列 B并将表 B - 列 C 设置为值 1
- 如果表 A - 列 C中的值已经存在于表 B中,则定位 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;