我的触发器看起来像这样:
CREATE TRIGGER findavg after INSERT
ON rating
FOR EACH row
UPDATE `profile`
SET userscore = (SELECT Avg(rscore)
FROM rating
WHERE `profile`.`pid` = rating.raterid)
WHERE pid = new.pid;
,其中
PROFILE table - pID, name, userScore
RATING table - raterID, rScore, rDescription
它在我第一次实现此触发器时有效,但是昨天我将所有数据都放在配置文件和评级表中。因此,我为个人资料和评级插入了“新近”的数据。
现在,每当我插入“评分”时,触发器都不会更新 userScore。
现在,我有一些PROFILE在userScore中有“ 0 ”,即使在RATING表中,rScore的值为“6”。
我很困惑,因为我非常肯定基于语法,它已经是正确的了。
请帮帮我。谢谢。
答案 0 :(得分:1)
尝试:
DELIMITER //
CREATE TRIGGER `findavg` AFTER INSERT ON `rating`
FOR EACH ROW
BEGIN
UPDATE `profile`
SET `userscore` = (SELECT AVG(`rscore`)
FROM `rating`
WHERE `raterid` = `pid`)
-- WHERE `pid` = NEW.`pid`;
WHERE `pid` = NEW.`raterid`;
END//
DELIMITER ;