我正在尝试创建一个触发器,但是我一直收到语法错误。
以下是声明:
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。我在运行语句之前更改了分隔符。
答案 0 :(得分:1)
除了在创建触发器时正确使用DELIMITER
时,您当前的代码至少存在两个基本问题:
UPDATE
)发出DML语句(在您的情况下为candidates
)(也是candidates
)。您的仅选项是使用BEFORE
触发器,并将正在插入的行的userid
列的值设置为正确的值。useradmin.userid
中那样随意引用某个表格的列(UPDATE
)。您没有加入useradmin
表或在子查询中使用它。话虽如此,并假设userid
表中的useradmin
是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 演示
答案 1 :(得分:0)
结束插入查询后应使用分号。
答案 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 ;