mysql - 如何创建触发器 MySQL 5.6

标签 mysql sql triggers

我们在 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/

相关文章:

sql - 在此 SQL 查询中进行多连接的更好方法?

mysql - 在 PHPMyAdmin 中设置触发器

MySQL:更新而不改变数据,可能吗?

php - MySQL Select - 连接所有匹配的表

mysql - 阅读 MySQL 中的其他线程警告

sql - 将某个时间段内的所有日期插入表中

sql - 编写一个 sql 查询以返回具有两个评分的电影?

mysql - 高效的 CASE 语句,SQL

php - 根据其他查询的值选择查询

javascript - Google 表格中的 Google Apps 脚本是否有类似悬停的触发器?