【问题标题】:Mysql 2 updates in the same triggerMysql 2 在同一个触发器中更新
【发布时间】:2016-11-01 01:13:25
【问题描述】:

我有 2 个表路由和位置。当路由表中的驱动程序名称或 rt_num 发生更改时,我需要更新 loc 表。我整天都在尝试使用以下代码。每个 UPDATE 语句都作为它自己的触发器。我不确定它是否可以完成。

 分隔符 |
    在 `route` 更新后创建触发器`add2`
    每一行
    开始
    在“路线”更新后;

    更新位置
      SET drivername = new.driver_d_name
      WHERE rt_nanme = old.rt_num;

   更新位置
    SET rt_nanme = new.rt_num
    WHERE rt_nanme = old.rt_num;

    结尾;
    |
    分隔符;

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    为什么要重复after update 声明?

    此外,您不需要两个更新语句。所以:

    DELIMITER $$
    
    CREATE TRIGGER `add2` AFTER UPDATE ON `route`
    FOR EACH ROW 
    BEGIN
    
        UPDATE loc
            SET drivername = new.driver_d_name,
                rt_nanme = new.rt_num
        WHERE rt_nanme = old.rt_num;
    
    END;$$
    
    DELIMITER ;
    

    【讨论】:

    • 谢谢 Gordon Linoff 的工作就像一个魅力。我是 65 岁的新手,我倾向于把事情复杂化。
    【解决方案2】:

    更新前与旧值比较

    DELIMITER |
        CREATE TRIGGER `add2` AFTER UPDATE ON `route`
        FOR EACH ROW 
        BEGIN
           IF(new.driver_d_name!=old.driver_d_name) THEN
                UPDATE loc
                SET drivername = new.driver_d_name
                WHERE rt_nanme = old.rt_num;
            END IF;
           IF(new.rt_num!=old.rt_num) THEN
               UPDATE loc
                SET rt_nanme = new.rt_num
                WHERE rt_nanme = old.rt_num;    
              END IF;
        END;
        |   
        DELIMITER ;
    

    【讨论】:

      【解决方案3】:

      having multiple updates in a single trigger 没有任何问题。但是您的触发器有语法问题,这可能是导致失败的原因。试试这个:

      DELIMITER |
      CREATE TRIGGER `add2` AFTER UPDATE ON `route`
      FOR EACH ROW 
      BEGIN
      
          UPDATE loc
          SET drivername = new.driver_d_name
          WHERE rt_nanme = old.rt_num;
      
          UPDATE loc
          SET rt_nanme = new.rt_num
          WHERE rt_nanme = old.rt_num;    
      
      END
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-20
        • 2011-03-23
        • 1970-01-01
        • 2015-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多