简体   繁体   English

mySQL TRIGGER错误代码1064

[英]mySQL TRIGGER error code 1064

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;

im trying to update one table(average) when another one gets changed(score) it is telling me to add a semicolon but as you can see there is one there allready 我正在尝试更新一个表(平均),而另一张表却被更改(分数),它告诉我添加分号,但是正如您所看到的,那里已经准备好了

If a trigger (or any stored procedure) contains only one statement, you don't need BEGIN and END : 如果触发器(或任何存储过程)仅包含一个语句,则不需要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);

I also replaced the subquery with VALUES(TestAvg) , since this value has already been selected. 我还用VALUES(TestAvg)替换了子查询,因为已经选择了该值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM