【问题标题】:Trigger Error using MySQL使用 MySQL 触发错误
【发布时间】:2014-08-09 17:07:46
【问题描述】:

这是我第一次尝试设置触发器,但实际上,我已经尽最大努力为此工作了 1 小时,但我的尝试都失败了。

代码是这样的,方法很简单,我声明了一个论坛帖子表,我想用触发器设置过期日期。 CREATE TABLE post( pid INT NOT NULL AUTO_INCREMENT, owner_id INT, title VARCHAR(140), text VARCHAR(255), posted TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, expiration DATETIME, PRIMARY KEY( pid ), FOREIGN KEY( owner_id ) REFERENCES user( userid ) ); delimiter $$ CREATE TRIGGER post BEFORE INSERT post FOR EACH ROW BEGIN SET new.'expiration' = DATE_ADD(NOW(), INTERVAL 60 DAY); END; $$ DELIMITER;

你能解释一下触发器声明中的错误在哪里吗? 提前谢谢你。

【问题讨论】:

  • 你遇到了什么错误?
  • 这是我得到的错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在第 2 行的“post FOR EACH ROW BEGIN SET new.'expiration' = DATE_ADD(NOW(), IN' 附近使用”
  • 你只漏掉了一个空格:最后一行必须是DELIMITER ;
  • @VMai:我试图添加一个空格,但我得到了同样的错误..

标签: mysql sql triggers intervals


【解决方案1】:

只有几个小问题:

  • BEFORE INSERT ON post 上缺少 ON 关键字
  • 列名 new.expiration 周围有单引号,而不是反引号,或者最好没有引号
  • DELIMITER 和分隔符字符串之间也需要空格。

应该是

 delimiter $$
 CREATE TRIGGER post
     BEFORE INSERT ON post    -- ON missing
     FOR EACH ROW BEGIN
         SET new.expiration = DATE_ADD(NOW(), INTERVAL 60 DAY);  -- no single quotes
     END;
 $$
 DELIMITER ;  -- blank needed

相反。在这种情况下,其他一些眼睛会派上用场。

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 1970-01-01
    • 2015-02-28
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多