如何在 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 中创建触发器的主要内容,如果未能解决你的问题,请参考以下文章

如何在informix中创建触发器?

如何在 SEQUELIZE (nodeJS) 中创建触发器?

如何使用触发器在 oracle 中创建镜像表?

如何在插入时在 SQL Server 中创建触发器?

如何在 mongodb atlas 中创建插入触发器?

如何基于 Azure 数据工厂中创建的 Blob 执行触发器?