【问题标题】:MySQL Triggers: Using a conditional statementMySQL 触发器:使用条件语句
【发布时间】:2015-01-10 13:36:18
【问题描述】:

我有一个触发器,我终于在previous question 中工作了

我现在想做的是,在同一个触发器中,如果特定字段发生更改,则更新特定字段。所以当 step5_complete 从 0 变为 1 时,我想将 date_completed 字段更新为当前的日期时间。

我目前收到一条关于 SQL 语法错误的错误消息,但它说

在第 13 行的“//”附近

这是

SET NEW.percent_complete = ( NEW.step1_complete + NEW.step2_complete + NEW.step3_complete + NEW.step4_complete + NEW.step5_complete ) * 20;

这是我的完整触发器

DROP TRIGGER IF EXISTS completed_part_after_update ;

DELIMITER //

CREATE TRIGGER completed_part_after_update
BEFORE UPDATE
   ON completed_part FOR EACH ROW

BEGIN

  IF NEW.step5_complete <> OLD.step5_complete THEN
     SET NEW.date_completed = NOW();     
  END IF;

  SET NEW.percent_complete = ( NEW.step1_complete + NEW.step2_complete + NEW.step3_complete + NEW.step4_complete + NEW.step5_complete ) * 20;

END; //

【问题讨论】:

    标签: mysql triggers conditional


    【解决方案1】:

    您最后的陈述看起来是错误的。应该是

    END//
    DELIMITER ;
    

    也就是说,触发器主体应该是这样的

    DELIMITER //
    
    CREATE TRIGGER completed_part_after_update
    BEFORE UPDATE
       ON completed_part FOR EACH ROW
    
    BEGIN
    
      IF NEW.step5_complete <> OLD.step5_complete THEN
         SET NEW.date_completed = NOW();     
      END IF;
    
      SET NEW.percent_complete = ( NEW.step1_complete + NEW.step2_complete + NEW.step3_complete + NEW.step4_complete + NEW.step5_complete ) * 20;
    
    END//
    DELIMITER ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多