我有两个表:
- oee_main
- 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 值。
谢谢
最佳答案
我认为这就是你想要的逻辑:
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
的列。
关于Mysql After Insert 触发器检查新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31160569/