【问题标题】:mysql trigger after query with joinmysql 在使用 join 查询后触发
【发布时间】:2020-05-17 03:18:27
【问题描述】:

我想创建一个触发器,当状态更改为“库存”时设置新的 org_id。
我有 2 个表:具有属性 org_id 的功能性和具有状态的物理设备。 调用触发器的更新是这样的:

UPDATE functionalci f
  JOIN physicaldevice d
    ON f.id = d.id
   SET d.status = 'stock', f.name ="XXX"  
 WHERE d.id = 2

当我尝试像这样的触发器时:

CREATE TRIGGER trig1
AFTER UPDATE ON physicaldevice 
FOR EACH ROW  
BEGIN 
    UPDATE functionalci SET org_id=2  WHERE functionalci.id = OLD.id;
END;

我有这个错误:mysql_errno = 1442, mysql_error = Can't update table 'functionalci' in stored function/trigger 因为它已被调用此存储函数/触发器的语句使用

有什么方法可以在不更改调用它的 UPDATE 的情况下执行触发器?

【问题讨论】:

  • 存储的函数或触发器不能修改已被调用函数或触发器的语句使用(用于读取或写入)的表。您尝试更改在此查询中更新的另一个表 - 抱歉...

标签: mysql triggers mysql-error-1442


【解决方案1】:

最后我会创建一些mysql事件来解决这个问题。类似的东西:

CREATE EVENT ev 
ON SCHEDULE EVERY 1 MINUTE
DO
    UPDATE functionalci f
    JOIN physicaldevice d
    ON f.id = d.id
    SET f.org_id = 2
    WHERE f.org_id <> 2 AND d.status LIKE "stock"   

它和触发器不一样,但它对我有用。

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 2012-02-04
    • 2018-05-12
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2012-05-14
    • 2015-03-16
    相关资源
    最近更新 更多