在 sc 表上设计一个 update 触发器,当修改一个学生的课程成绩时,自动修改 cg 表的平均分数,以保持数据一致性
时间: 2024-12-14 22:21:14 浏览: 19
在 SQL 中,你可以创建一个名为 `update_trigger` 的触发器,当对 `sc` 表的特定字段(如 `score`)进行更新时,该触发器会被激活并自动更新 `cg` 表的对应记录。这里是一个基本的示例,假设学生 ID 在两个表中都是一致的:
```sql
CREATE TRIGGER update_average_score
AFTER UPDATE ON sc
FOR EACH ROW
BEGIN
DECLARE total_score DECIMAL(10, 2);
DECLARE student_id INT;
-- 获取被更新的学生ID和总分
SET total_score = NEW.score + (SELECT score FROM sc WHERE student_id = NEW.student_id AND id NOT IN (SELECT id FROM information_schema_changes));
SET student_id = NEW.student_id;
-- 计算平均分数(如果存在其他成绩)
IF total_score IS NOT NULL THEN
UPDATE cg
SET average_score = total_score / (SELECT COUNT(*) FROM sc WHERE student_id = student_id)
WHERE student_id = student_id;
END IF;
END;
```
这个触发器会在每次更新 `sc` 表中指定学生的成绩 (`score`) 后运行。它首先计算新的总分,然后除以相应的学生的所有成绩数来得到新平均分数。注意,为了防止在触发器运行期间再次更新数据导致循环引用,我们使用了 `information_schema_changes` 视图来排除最近一次更新。
阅读全文