我们在 WordPress 系统上的created_at 遇到问题。不知何故,一些用户将该字段“随机”更新为无效值,因此它被设置为“00000000”日期时间。我们还没有在 WP 代码上找到原因,现在正在分析该项目拥有的几个插件。它拥有庞大的代码和用户群,因此我们认为使用 MySQL 触发器来捕获这种“随机”更新可能会更快。
问题是我们总是在触发代码上遇到语法错误,而我们是蹩脚的 SQLer,我们需要帮助来弄清楚它可能是什么。
我们要实现的目标是:
- 检测用户表何时更新
- 检查created_at行是否已被修改
- 将旧数据插入我们专门为此目的创建的新表 (user_registration_changed_records)。
我们决定检查每一行,以防出现一些奇怪的行为。
DELIMITER $$
CREATE TRIGGER `user_register_updated` BEFORE UPDATE ON `wp_t8y31tcd9u_users`
FOR EACH ROW
BEGIN
IF OLD.created_at != NEW.created_at
INSERT INTO user_registration_change_records (user_id, created_at) VALUES (OLD.ID, OLD.created_at)
END IF;
END;$$
DELIMITER ;
预先感谢您的任何建议!
语法错误
#1064 - 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 'INSERT INTO user_registration_change_records (user_id, created_at) VALUES (OLD.I' at line 6
最佳答案
您有几个语法错误:
insert
之前缺少then
关键字(这是与错误消息相关的关键字)- 插入行后缺少
;
- 额外的
;
在结束
之后
至少这些是我能看到的。
DELIMITER $$
CREATE TRIGGER `user_register_updated` BEFORE UPDATE ON `wp_t8y31tcd9u_users`
FOR EACH ROW
BEGIN
IF OLD.created_at != NEW.created_at THEN
INSERT INTO user_registration_change_records (user_id, created_at) VALUES (OLD.ID, OLD.created_at);
END IF;
END$$
DELIMITER ;
在 compound statement syntax 上使用 mysql 手册是值得的因为所有这些都可以在那里找到。
关于mysql - 如何创建触发器 MySQL 5.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43813004/