gpt4 book ai didi

mysql - 如何创建触发器 MySQL 5.6

转载 作者:行者123 更新时间:2023-11-29 10:50:34 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com