我正在尝试创建一个MySQL触发器,当在表wp_users中更新列user_email时触发,但它失败了。我在第二个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条件是什么。
答案 0 :(得分:2)
你有几个问题。
首先,您应该查看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 ;
答案 1 :(得分:0)
以下内容应解决此特定错误:
CREATE TRIGGER `email_update`
AFTER UPDATE ON `wp_users`
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;