如何在 phpmyadmin 中创建触发器
Posted
技术标签:
【中文标题】如何在 phpmyadmin 中创建触发器【英文标题】:How to create trigger in phpmyadmin 【发布时间】:2015-10-14 13:13:31 【问题描述】:当我尝试在 phpmyadmin 中创建触发器时出现此错误。我做错了什么?
SQL 查询:
CREATE TRIGGER ins_social
AFTER INSERT ON sa_users_social
FOR EACH ROW
BEGIN
INSERT INTO fsb2_users ( u_social_id, u_auth, u_nickname, u_email, u_avatar, u_signature, u_language, u_joined, u_sexe, u_rank_id )
VALUES ('NEW.social_id', '1', 'username', 'email', 'photoURL', 'description', 'fr', 'CURRENT_TIMESTAMP', 'gender', '0');
错误:
#1064 - 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册以获取正确的语法使用 在第 5 行的 '' 附近
【问题讨论】:
【参考方案1】:不喜欢存储过程,你不必把 BEGIN...END 放在那里。能否删除 BEGIN 再试一次?
或者,如果您需要将 BEGIN 放在那里,您可以这样做:
delimiter #
CREATE TRIGGER ins_social
AFTER INSERT ON sa_users_social
FOR EACH ROW
BEGIN
INSERT INTO fsb2_users ( u_social_id, u_auth, u_nickname, u_email, u_avatar, u_signature, u_language, u_joined, u_sexe, u_rank_id )
VALUES ('NEW.social_id', '1', 'username', 'email', 'photoURL', 'description', 'fr', 'CURRENT_TIMESTAMP', 'gender', '0');
END#
delimiter ;
另一个可能的错误是您在每个值周围加上单引号,这使得它们作为 varchars 传递。在声明中,我猜 u_social_id 是一个数值类型,对吧?因此,您将 varchar 值传递给数字类型字段,这是一个问题。由于您没有在此处发布表结构。这只是一个猜测。 :)
【讨论】:
谢谢 Chong Tang,当我删除 BEGIN 时它似乎工作正常,但我收到此错误:#1419 - 你没有超级权限并且启用了二进制日志记录(你可能 想要使用不太安全的 log_bin_trust_function_creators 变量)。我试图弄清楚如何授予我的用户名“超级权限”,我的 PHPmyadmin 版本没有可以设置它的权限选项卡。是的,u_social_id 是数字类型。此外,使用分隔符 # 它不起作用。以上是关于如何在 phpmyadmin 中创建触发器的主要内容,如果未能解决你的问题,请参考以下文章
TRIGGER 语法错误 mysql 说 #1303 - 无法从另一个存储的例程中创建触发器 - phpmyadmin