MYSQL 创建触发器,当更新某个同学选课成绩时,更新其平均成绩。注:学生表中有学号、课程号、平均成绩、选课成绩
时间: 2023-08-16 08:06:29 浏览: 108
假设你有一个名为 `students` 的表,其中包含学生的成绩信息,包括学生的学号(`student_id`)、课程号(`course_id`)、成绩(`score`)和平均成绩(`avg_score`)。现在你想要创建一个触发器,当更新某个同学的成绩时,自动更新其平均成绩。
首先,你需要创建一个 `BEFORE UPDATE` 触发器,以便在更新数据之前执行更新操作。以下是一个示例 SQL 语句:
```
CREATE TRIGGER update_avg_score
BEFORE UPDATE ON students
FOR EACH ROW
BEGIN
-- 更新学生的平均成绩
UPDATE students
SET avg_score = (SELECT AVG(score) FROM students WHERE student_id = NEW.student_id)
WHERE student_id = NEW.student_id;
END;
```
这个触发器的作用是:当更新数据之前,根据该学生的学号(`NEW.student_id`)查询该学生所有课程的平均成绩,并将结果更新到该学生的平均成绩(`avg_score`)字段中。
需要注意的是,这个触发器是在每一行数据更新之前执行的,因此每次更新平均成绩时都会重新计算该学生的所有课程的平均值。如果你有大量的数据需要更新,可能会影响性能。为了避免这种情况,你可以考虑将触发器改为在 `AFTER UPDATE` 时执行,这样可以减少计算量,但需要确保在更新平均成绩之前,已经更新了成绩数据。
阅读全文