mysql - 使用 MySQL 触发错误

标签 mysql sql triggers intervals

这是我第一次尝试设置触发器,但实际上,我已经尽力了 1 个小时,但我的尝试失败了。

代码是这样的,方式很简单,我声明了一个forum-post表,我想用触发器设置过期日期。 创建表帖子( pid INT NOT NULL AUTO_INCRMENT, 所有者 ID INT, 标题 VARCHAR(140), 文本 VARCHAR(255), 发布的 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 到期日期时间, 主键(pid), 外键(owner_id)引用用户(userid) ); 分隔符$$ 创建触发帖子 插入帖子之前 对于每一行开始 SET new.'expiration' = DATE_ADD(NOW(), INTERVAL 60 DAY); 结尾; $$ 分隔符;

您能解释一下触发器声明中的错误在哪里吗? 预先感谢您。

最佳答案

只有几个小问题:

  • BEFORE INSERT ON 帖子中缺少 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

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

关于mysql - 使用 MySQL 触发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25221034/

相关文章:

php - SQL 查询无效

php - 使用 php 检查查询行数

php - 在不知道字段名称的情况下选择主键值

sql - 两列通过 SQL Server 2012 上的触发器在同一个表上相互更新

java - 为什么不在指定位置创建备份文件?

mysql - InnoDB Small 更新很慢,性能问题

sql - 从多个表中选择,删除重复项

MYSQL:插入具有重复唯一键的记录时获取现有主键?

Oracle 触发器更新不同表中的实体

sql - SQLite UPDATE语句中的相关子查询(或等效查询)?