Mysql After Insert触发器检查新值

时间:2015-07-01 11:54:44

标签: mysql triggers

我有两张桌子:

  1. oee_main
  2. oee_client
  3. 我已经在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值。

    由于

1 个答案:

答案 0 :(得分:0)

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

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的列。