gpt4 book ai didi

mysql - 仅更新一列时 MySQL 触发器语法错误

转载 作者:行者123 更新时间:2023-11-29 06:26:01 26 4
gpt4 key购买 nike

我正在尝试创建一个 MySQL 触发器,当列 user_email 在表 wp_users 中更新时触发,但它失败了。我在第二个 BEGIN 之前收到语法错误,但对我来说看起来不错。我错过了什么?

CREATE TRIGGER `email_update` 
AFTER UPDATE ON `wp_users`
FOR EACH ROW
BEGIN IF NEW.user_email <> OLD.user_email
BEGIN
INSERT INTO `bfintranet`.`intranet_staff_updates` (`staff_update_ID`, `user_ID`, `updated_value`, `new_value`, `old_value`, `update_datetime`)
VALUES (NULL, NEW.ID, 'user_email', NEW.user_email, OLD.user_email, now())
END
END;

没有只有一列的条件,它工作正常(但没有达到我想要的效果):

CREATE TRIGGER `email_update` 
AFTER UPDATE ON `wp_users`
FOR EACH ROW
INSERT INTO `bfintranet`.`intranet_staff_updates` (`staff_update_ID`, `user_ID`, `updated_value`, `new_value`, `old_value`, `update_datetime`) VALUES (NULL, NEW.ID, 'user_email', NEW.user_email, OLD.user_email, now())

无论 IF 之后的内容或 IF 条件是什么,它似乎都会出错。

最佳答案

你有几个问题。

首先,您应该查看 MySQL IF...THEN...END IF 语法:https://dev.mysql.com/doc/refman/5.5/en/if.html

对于像这样的复杂查询,您还需要临时覆盖默认分隔符,以便您可以在触发器中使用分号。

这应该有效:

DELIMITER $$

CREATE TRIGGER `email_update`
AFTER UPDATE ON `wp_users`
FOR EACH ROW
BEGIN IF NEW.user_email <> OLD.user_email
THEN
INSERT INTO `bfintranet`.`intranet_staff_updates` (`staff_update_ID`, `user_ID`, `updated_value`, `new_value`, `old_value`, `update_datetime`)
VALUES (NULL, NEW.ID, 'user_email', NEW.user_email, OLD.user_email, now());
END IF;
END $$

DELIMITER ;

关于mysql - 仅更新一列时 MySQL 触发器语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30939805/

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