MySQL触发器:使用条件语句

MySQL触发器:使用条件语句,mysql,triggers,conditional,Mysql,Triggers,Conditional,我有一个触发器,我终于在一个 我现在想做的是,在同一个触发器中,如果某个特定字段发生更改,则更新某个特定字段。因此,当step5_complete从0更改为1时,我希望将date_completed字段更新为当前日期时间 我目前收到一条关于SQL语法错误的错误消息,但它说 在第13行的“/”附近 那是 SET NEW.percent_complete = ( NEW.step1_complete + NEW.step2_complete + NEW.step3_complete + NEW.st

我有一个触发器,我终于在一个

我现在想做的是,在同一个触发器中,如果某个特定字段发生更改,则更新某个特定字段。因此,当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; //
在更新后,如果存在已完成的\u部分\u,则丢弃触发器;
分隔符//
更新后创建触发器已完成\u部分\u
更新前
在每行的已完成零件上
开始
如果是新的。步骤5\u完成旧的。步骤5\u完成,然后
设置NEW.date_completed=NOW();
如果结束;
设置NEW.step1_complete=(NEW.step1_complete+NEW.step2_complete+NEW.step3_complete+NEW.step4_complete+NEW.step5_complete)*20;
结束//

您的上一句话似乎有误。应该是

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 ;
分隔符//
更新后创建触发器已完成\u部分\u
更新前
在每行的已完成零件上
开始
如果是新的。步骤5\u完成旧的。步骤5\u完成,然后
设置NEW.date_completed=NOW();
如果结束;
设置NEW.step1_complete=(NEW.step1_complete+NEW.step2_complete+NEW.step3_complete+NEW.step4_complete+NEW.step5_complete)*20;
结束//
定界符;