我这里有这个代码:
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
有人可以澄清为什么这个触发器不好吗?
答案 0 :(得分:1)
我发现了四个问题:
DELIMITER
s,以便能够像往常一样用分号完成命令。
FOR EACH ROW
遗失了。
new.uid
访问最近插入的uid。
但你甚至不必声明一个变量。 如果您不使用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 triggers和this answer关于变量。
编辑,我过度使用了phpMyAdmin:
我不使用phpMyAdmin。但你可以(从here偷走)
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;$$