mySQL TRIGGER错误代码1064

时间:2017-03-22 18:22:47

标签: mysql sql triggers

USE test;
CREATE TRIGGER AvgUpdateTrigger AFTER INSERT ON test.score
FOR EACH ROW
BEGIN
INSERT INTO test.average (test.average.TestID, test.average.TestAvg)
(SELECT test.score.TestID, avg(test.score.ScoreValue) FROM test.score GROUP BY test.score.TestID)
ON DUPLICATE KEY 
UPDATE test.average.TestAvg = (SELECT avg(test.score.ScoreValue) FROM test.score WHERE test.score.TestID = test.average.TestID GROUP BY test.score.TestID);
END;

我试图更新一个表(平均值),当另一个表发生变化时(得分) 它告诉我添加一个分号,但正如你所看到的那样已经有一个分号

1 个答案:

答案 0 :(得分:0)

如果触发器(或任何存储过程)只包含一个语句,则不需要BEGINEND

CREATE TRIGGER AvgUpdateTrigger AFTER INSERT ON test.score
FOR EACH ROW
    INSERT INTO test.average (TestID, TestAvg)
        SELECT test.score.TestID, avg(test.score.ScoreValue)
        FROM test.score
        GROUP BY test.score.TestID
        ON DUPLICATE KEY UPDATE
            test.average.TestAvg = VALUES(TestAvg);

我还将子查询替换为VALUES(TestAvg),因为此值已被选中。