mysql - 将 CONCAT 与 MySQL 触发器一起使用(在 , 处出错)

标签 mysql sql triggers concatenation

我正在尝试创建一个触发器,以便在编辑 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

控制台返回以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 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
;

用户积压:

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
);

最佳答案

更新:

  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 block 和 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 演示

关于mysql - 将 CONCAT 与 MySQL 触发器一起使用(在 , 处出错),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20388732/

相关文章:

java - 在jdbc中获取表依赖顺序

mysql - SQL查询复制某个字段

SQL 错误 : misuse of aggregate

mysql - 每次创建新行时更新值

java - 如何使用Java在SQL查询中指定数据库

mysql - 为 session 设置 mysql 表的别名?

sql - 使用 T-SQL 附加多个数据库

mysql - SQL语句获取具有特定条件的ID?

javascript - 我们可以触发 tabkey 事件以将光标移动到 select2 的下一个元素吗

CREATE TRIGGER 之前 DELIMITER 上的 MySQL 语法错误