我正在尝试创建一个触发器,以便在编辑 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
);
最佳答案
更新:
- 看起来您没有更改
DELIMITER
。 - 您很可能是指
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/