gpt4 book ai didi

MySQL 在触发器澄清后插入

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

我这里有这段代码:

CREATE TRIGGER testTrigger 
AFTER INSERT ON users
BEGIN
DECLARE @uid VARCHAR(60)
SET @uid = (SELECT userid FROM inserted)
INSERT INTO user_locations (id,uid,lat,lng) VALUES (0,@uid,5.0,5.0)
END;

这个想法是,一旦生成的用户 ID 到达第一个“用户”表,就将其与其他一些数据一起插入到其他表中,但 phpMyAdmin 给出了以下错误代码:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 
BEGIN
DECLARE @uid VARCHAR(60)
SET @uid = (SELECT userid FROM inserted)
at line 3

有人可以解释为什么这个触发器不好吗?

最佳答案

我发现四个问题:

  • 您必须使用DELIMITER,以便您能够像往常一样用分号结束命令。
  • 缺少FOR EACH ROW
  • 使用 new.uid 访问最近插入的 uid。
  • 我还建议使用过程变量而不是特定于 session 的用户定义的 @variables,后者是松散类型的,并且没有像您所做的那样声明。

但是您甚至不必声明变量。 如果您不使用 phpMyAdmin:

DELIMITER //
CREATE TRIGGER testTrigger
AFTER INSERT ON users FOR EACH ROW
BEGIN
INSERT INTO user_locations (id,uid,lat,lng) VALUES (0,new.uid,5.0,5.0);
END//
DELIMITER ;

检查this answer关于分隔符和 the MySQL 5.7 docs on triggersthis answer关于变量。

编辑,我读到您正在使用 phpMyAdmin:

我不使用 phpMyAdmin。但你可以(盗自 here )

  • 在 phpMyAdmin 中,选择您要使用的数据库。
  • 转到页面顶部的 SQL 选项卡。
  • 在“运行 SQL 查询/数据库查询”表单中,将分隔符更改为 $$。 (位于表格底部的一个小框中)
  • 在表单的主对话框中输入 SQL 触发器。正确的语法如下:
CREATE TRIGGER testTrigger 
AFTER INSERT ON users FOR EACH ROW
BEGIN
INSERT INTO user_locations (id,uid,lat,lng) VALUES (0,new.uid,5.0,5.0);
END;$$
  • 使用 super 权限点击“GO”。

关于MySQL 在触发器澄清后插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36319409/

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