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

在 phpMyAdmin 中创建一个约束作为触发器

在 phpmyadmin 中创建触发器

TRIGGER 语法错误 mysql 说 #1303 - 无法从另一个存储的例程中创建触发器 - phpmyadmin

PHPMYADMIN 中的过程和触发器

如何查看用于在 phpMyAdmin 或其他程序中创建视图的原始 MySQL?

我们如何在 MySQL 工作台模式部分查看在 phpmyadmin 中创建的数据库/表?