我正在尝试创建一个触发器,但某处出现错误,因为我是新手,我无法解决它...
所以基本上我有两张桌子:
students(stud_num:INT, grade_avg :real)
grading(stud_num:INT, classe:char(5), grade:int)
学生stud_num
中的是主键,在评分中它引用了学生表..
我的教授想要的是创建一个触发器,每次我们在评分中插入成绩时,grade_avg
都会在学生中更新。
这是我到目前为止所做的:
DELIMITER %%
创造触手的东西
插入评分后
每行开始
@ stud_num = new.stud_num;
更新学生
SET grade_avg =(SELECT AVG(grade)FROM grading WHERE stud_num = @ stud_num);
END;
%%
有人可以帮帮我吗?
答案 0 :(得分:2)
问题在于您使用用户定义变量的方式,并且实际上并不需要它,所以您可以使用new.stud_num
代替@stud_num
来跳过它。
您还应该将更新语句限制为仅更新相关学生的行,而不是更新所有行。
DELIMITER %%
CREATE TRIGGER something
AFTER INSERT ON grading
FOR EACH ROW BEGIN
UPDATE students
SET grade_avg=(
SELECT AVG(grade)
FROM grading
WHERE stud_num=new.stud_num
)
WHERE stud_num=new.stud_num;
END;
%%
DELIMITER ;