gpt4 book ai didi

MySQL 触发器创建。我的触发器出了什么问题?

转载 作者:行者123 更新时间:2023-11-29 13:25:13 24 4
gpt4 key购买 nike

我正在尝试创建触发器,但我不断收到语法错误。

声明如下:

DELIMITER $$

CREATE TRIGGER `swtalentbank`.`after_candidate_insert`
AFTER INSERT ON `Candidates` FOR EACH ROW
BEGIN
INSERT INTO useradmin (username, talent)
VALUES (NEW.email, 1);
UPDATE `Candidates` SET UserID = useradmin.userid where useradmin.username = NEW.email;
END

DELIMITER ;

我的网站上有一份注册表。当一个人注册时,它会用他们的个人资料信息填充候选人表。

在“候选人”表中,有多个字段,其中两个是'email''UserID'UserID 也是“useradmin”中的 PK,因此我将两者联系起来。

因此,当用户注册时,我需要使用刚刚用于注册的电子邮件地址在“useradmin”中插入一条记录,然后更新“Candidates”表,其中 UserID 只是已在“useradmin”中创建。

我希望这是有道理的?

注意。我在运行语句之前更改分隔符。

最佳答案

除了正确使用DELIMITER创建触发器时,您当前的代码至少存在两个基本问题:

  1. 在 MySQL 中,您不能对定义了触发器(也是 UPDATE )的表( candidates )使用发出 DML 语句(在您的情况下为 candidates )。您唯一的选择是使用 BEFORE触发并设置值 userid行的列被插入到适当的值。
  2. 您不能像在 useradmin.userid 中那样在上下文之外任意引用表的列 ( UPDATE ) 。您还没有加入useradmin表或在子查询中使用它。

话虽如此,并假设 useriduseradmin表是 auto_increment您的触发器可能看起来像这样的列

DELIMITER $$
CREATE TRIGGER after_candidate_insert
BEFORE INSERT ON candidates
FOR EACH ROW
BEGIN
INSERT INTO useradmin (`username`, `talent`) VALUES (NEW.email, 1);
SET NEW.userid = LAST_INSERT_ID();
END$$
DELIMITER ;

这里是SQLFiddle 演示

关于MySQL 触发器创建。我的触发器出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20238646/

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