【问题标题】:Using CONCAT with MySQL Triggers (Error at ,)将 CONCAT 与 MySQL 触发器一起使用(在 , 处出错)
【发布时间】:2013-12-21 17:29:01
【问题描述】:

我正在尝试创建一个触发器以在 x 表中的行已被编辑时写入日志。

这是当前查询..

CREATE TRIGGER users_update_trigger
AFTER UPDATE ON users FOR EACH ROW
BEGIN
    INSERT INTO users_backlog
    (user_id, description, datetime) VALUES (user_id,
    CONCAT('modified from ', OLD.value, ' to ', NEW.value), CURTIMESTAMP());
END

控制台返回如下错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 6 行的 '' 附近

谁能告诉我我在这里做错了什么?

编辑: 相关表的架构 用户:

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `hourly` decimal(10,2) DEFAULT NULL,
  `date_paid` date DEFAULT NULL
;

Users_backlog:

CREATE TABLE IF NOT EXISTS `users_backlog` (
  `log_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `description` varchar(50) NOT NULL,
  `datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);

【问题讨论】:

  • 1st,OLD.valueNEW.value是哪里来的?我可以看到你没有声明那些。第二个是CURTIMESTAMP() 将返回TIMESTAMP 而不是DATETIME
  • @ChristianMark 啊我还没有声明这个,'value'列都是十进制的(10, 2)
  • @imran 请显示users 表的表架构
  • MySQL 中也没有调用 CURTIMESTAMP() 的函数...
  • 那么实际的表名paymentsusers 是什么? payments 表的 auto_increment user_id 列没有多大意义

标签: mysql sql triggers concat


【解决方案1】:

更新:

  1. 您似乎没有更改DELIMITER
  2. 您很可能是指CURRENT_TIMESTAMP,而不是不存在的CURTIMESTAMP()

也就是说,您的触发器的语法正确版本可能看起来像

DELIMITER $$
CREATE TRIGGER users_update_trigger
AFTER UPDATE ON users 
FOR EACH ROW
BEGIN
  INSERT INTO users_backlog (user_id, description, datetime) VALUES 
  (NEW.user_id, CONCAT('modified from ', OLD.hourly, ' to ', NEW.hourly), CURRENT_TIMESTAMP);
END$$
DELIMITER ;

或者(因为您的触发器中只有一个语句,您可以省略 BEGIN ... END 块和 DELIMITER)简单地

CREATE TRIGGER users_update_trigger
AFTER UPDATE ON users 
FOR EACH ROW
  INSERT INTO users_backlog (user_id, description, datetime) VALUES 
  (NEW.user_id, CONCAT('modified from ', OLD.hourly, ' to ', NEW.hourly), NOW());

这里是SQLFiddle演示

【讨论】:

    【解决方案2】:

    在运行定义之前,您没有将 DELIMITER 设置为不同于 ; 的值。

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多