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

标签 mysql sql triggers

我有两个表:

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

在表 A 中插入新行后我想要执行的操作是:

  1. 检查表 A - 列 C 中插入的值是否已在表 B
  2. 如果表 B中的值,请将表 A - 列 C 中的数据插入到表 B - 列B将表 B - 列 C 的值设置为 1
  3. 如果表 A - 列 C 中的值已存在于表 B 中,则找到该行并增加表 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/

相关文章:

c# - 如何在 C# WPF 中鼠标悬停时弹出图像

mysql - 带有索引列的 WHERE 子句中的 "CASE WHEN"

sql - 在一个词中搜索文字

sql - MAX()和MAX()OVER PARTITION BY在Teradata查询中产生错误3504

MySQL语句想要查询WordPress数据库中相关的自定义帖子类型帖子

postgresql - Postgres 触发器和生产者(关系的列 "new"不存在)

triggers - 触发更改 Trac 票据的操作?

php - 电视指南PHP脚本/数据库结构

php - 即使代码正确,也无法选择数据库表

sql - 选择具有最大 JSON 键的对象