MySQL触发器未将日期/时间字符串插入列

时间:2019-11-21 21:56:51

标签: mysql database-trigger

这是我的触发器。在event中更新一行不会在sf_timestamp中设置日期/时间字符串。触发器的新手,所以我不确定如何调试。

DELIMITER $$

CREATE DEFINER = `root`@`localhost` TRIGGER `event_stamp` 
BEFORE UPDATE ON `event` 

FOR EACH ROW 
  BEGIN
      SET NEW.sf_timestamp = DATE_FORMAT(NOW(),'%Y-%m-%d %T');
  END;;

DELIMITER $$

建议?

3 个答案:

答案 0 :(得分:1)

除非您的更新语句包含sf_timestamp的值,否则该字段可能没有要格式化的值。如果您尝试更新时间戳以表示记录更新的时间,为什么不只使用当前时间呢?

DELIMITER $$

CREATE DEFINER = `root`@`localhost` TRIGGER `event_stamp` BEFORE UPDATE ON `event` 
FOR EACH ROW 
    BEGIN
        SET NEW.sf_timestamp = now();
    END;;

DELIMITER $$

答案 1 :(得分:1)

定义DELIMITER时,需要保留相同的定界符,直到完成要声明的块为止。在这种情况下,您尝试创建一个新的触发器,并且需要MySQL将多行的整个块解释为一行,并以默认的;

结尾

但是,当您完成操作后,必须使用之前设置的END DELIMITER ,如下所示

DELIMITER $$

CREATE DEFINER = `root`@`localhost` TRIGGER `event_stamp` 
BEFORE UPDATE ON `event` 

FOR EACH ROW 
  BEGIN
      SET NEW.sf_timestamp = DATE_FORMAT(NOW(),'%Y-%m-%d %T');
  END$$

DELIMITER ;

答案 2 :(得分:0)

DELIMITER $$

CREATE DEFINER = `root`@`localhost` TRIGGER `event_stamp`     
BEFORE UPDATE ON `event` 
FOR EACH ROW 
    BEGIN
        SET NEW.sf_timestamp = DATE_FORMAT(NOW(),'%Y-%m-%d %T');
    END$$

DELIMITER ;

遵循@pensums建议,这对我有用