[英]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
: 如果触发器(或任何存储过程)仅包含一个语句,则不需要
BEGIN
和END
:
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.