【问题标题】:Mysql After Insert trigger to check new valueMysql After Insert 触发器检查新值
【发布时间】:2015-09-18 13:35:10
【问题描述】:

我有两张桌子:

  1. oee_main
  2. oee_client

我在 oee_main 上已经有一个插入后触发器,如下所示:

CREATE TRIGGER `oee_upd` AFTER INSERT ON `oee_main`
 FOR EACH ROW UPDATE oee_client
    SET END_DATE= NOW()  where END_DATE IS NULL

我现在需要进一步开发触发器,以便 oee_main 中新插入的行不仅将 oee_client 的 END_DATE 更新为 NOW(),其中 END_DATE 为 NULL,而且只更新 oee_client 的行,其中列称为 Machine_ID 等于 oee_main 中新插入的名为 NAME 的列。

我已尝试将此添加到上述触发器的 where 条件中,但没有成功:

where END_DATE IS NULL and Machine_ID = new.`oee_main`.`NAME`

因此,我所追求的是,​​当在 oee_main 中插入新记录时,该记录在“NAME”列中的值为例如“2”,触发器仅更新 oee_client 的 END_DATE 列,其中 NULL 和 oee_client 的 Machine_ID 为等于 oee_main 中新插入的 NAME 值。

谢谢

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    我认为这是你想要的逻辑:

    DELIMITER $$
    CREATE TRIGGER `oee_upd` AFTER INSERT ON `oee_main`
    FOR EACH ROW
    BEGIN
        UPDATE oee_client c
            SET c.END_DATE = NOW()  
            WHERE c.END_DATE IS NULL AND c.Machine_ID = new.NAME;
    END$$
    DELIMITER ;
    

    记住在定义触发器、存储过程和函数时使用delimiter 语句。这将有助于防止将来出现错误。

    至于你的错误,使用NEW的时候不用提表名。

    作为一个局外人,我发现一张表中的NAME 与另一张表中的MACHINE_ID 匹配令人困惑。我希望这两个表都有一个名为 MACHINE_ID 的列。

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多