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

时间:2013-11-27 09:36:05

标签: mysql sql triggers

我正在尝试创建一个触发器,但是我一直收到语法错误。

以下是声明:

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 is also the PK in 'useradmin',所以我把两者联系起来。

因此,当用户注册时,我需要使用刚刚用于注册的电子邮件地址向“useradmin”插入记录,然后使用刚创建的用户ID更新“候选人”表。 'useradmin'。

我希望这有道理吗?

NB。我在运行语句之前更改了分隔符。

3 个答案:

答案 0 :(得分:1)

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

  1. 在MySQL中,您不能使用针对您定义了触发器的表(UPDATE)发出DML语句(在您的情况下为candidates)(也是candidates)。您的选项是使用BEFORE触发器,并将正在插入的行的userid列的值设置为正确的值。
  2. 您不能像在useradmin.userid中那样随意引用某个表格的列(UPDATE)。您没有加入useradmin表或在子查询中使用它。
  3. 话虽如此,并假设userid表中的useradminauto_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 演示

答案 1 :(得分:0)

结束插入查询后应使用分号。

您可以使用INSERT ... ON DUPLICATE KEY UPDATE语法

答案 2 :(得分:0)

试试这个......

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 ;