我是一位非常新的数据库学生......
我有两张桌子。用户和旅行。
每当一个新的Trip被添加到数据库时,我希望它在" totalMiles"中触发对User表的更新。柱。我希望它采用Trip.userID并更改" totalMiles"中的值。仅具有与Trip.userID条目相同的User.userID的用户的列。
我希望它从" tripMiles"中获取总和。 Trip.userID = User.userID。 userID是User表中Trip表中的外键。
现在我只有:
CREATE DEFINER='root'@'localhost'TRIGGER 'DATABASE'.'Trip_AFTER_INSERT'
AFTER INSERT ON 'Trip' FOR EACH ROW
BEGIN
UPDATE User
SET totalMiles=sum(tripMiles)
WHERE Trip.userID = User.userID;
END
我得到的错误是"未知栏' Trip.userID'在' where子句'。
我在谷歌搜索并搜索了几个帖子,但我没有找到任何东西。
答案 0 :(得分:0)
只需将clausule上的de“User.userID”更改为“NEW.userID”
即可“新”对象意味着您的新TRIP已添加...
这样的事情:
CREATE TRIGGER 'Trip_AFTER_INSERT'
AFTER INSERT ON 'Trip' FOR EACH ROW
BEGIN
UPDATE User
SET totalMiles=sum(tripMiles)
WHERE User.userID = NEW.userID;
END
如果您需要更多信息,请参阅此处的文档:
https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html
在这里
How to program a MySQL trigger to insert row into another table?
答案 1 :(得分:0)
您的语句存在多个问题,从单引号开始。一种方法是重新计算总和:
CREATE TRIGGER DATABASE.Trip_AFTER_INSERT
AFTER INSERT ON Trip FOR EACH ROW
BEGIN
UPDATE User u
SET totalMiles = (SELECT sum(t.tripMiles) FROM Trip t WHERE t.userId = u.userId)
WHERE u.userID = new.userID;
END;
但是,这太过分了。如果totalMiles
之前是正确的,那么只需调整值:
CREATE TRIGGER DATABASE.Trip_AFTER_INSERT
AFTER INSERT ON Trip FOR EACH ROW
BEGIN
UPDATE User u
SET totalMiles = u.totalMile + new.tripMiles - old.tripMailes;
WHERE u.userID = new.userID;
END;