Mysql After Insert 触发器检查新值

标签 mysql triggers

我有两个表:

  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 值。

谢谢

最佳答案

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

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/

相关文章:

mysql - 如何在左连接查询中过滤主表

MySQL - 使用 LOAD DATA LOCAL INFILE 加载西里尔文数据

mysql - 无法让选择查询工作

postgresql - 触发器在插入/更新时不更新 tsvector

MySQL在从端基于行的主从复制中触发事件

oracle - PL/SQL 触发器无法正常工作

php - 无法使用php表单将数据插入mysql数据库

mysql - Sequelize : How to retrieve updated record after sequelize update query without using another query

mysql - 在mysql中创建触发器时出现错误 "1064"?

r - 我想在特定时间运行 R 代码