mysql 创建学生教务系统,已插入学生表名称为student,成绩表名称为score,课程表名称为course。创建一个触发器和事件并显示他们的调用方法
时间: 2024-03-28 22:41:49 浏览: 77
mysql数据库创建学生表.zip
好的,我可以帮你回答这个问题。
首先,我们可以为 `score` 表创建一个触发器,当插入新的成绩记录时,触发器将自动计算该学生的平均分并更新到 `student` 表中。
触发器的创建语法如下:
```sql
CREATE TRIGGER update_avg_score AFTER INSERT ON score
FOR EACH ROW
BEGIN
UPDATE student SET avg_score = (
SELECT AVG(score) FROM score WHERE student_id = NEW.student_id
) WHERE student_id = NEW.student_id;
END;
```
这个触发器的意思是:当 `score` 表插入一条新记录时(`AFTER INSERT ON score`),对于每一行记录(`FOR EACH ROW`),执行以下操作:将该学生的平均分计算出来并更新到 `student` 表中。其中,`NEW` 是一个特殊的变量,表示插入的新记录。
接下来,我们可以为 `course` 表创建一个事件,定期清理一些过期的课程记录。
事件的创建语法如下:
```sql
CREATE EVENT clean_up_course_records
ON SCHEDULE EVERY 1 DAY STARTS '2022-01-01 00:00:00'
DO
BEGIN
DELETE FROM course WHERE end_time < NOW();
END;
```
这个事件的意思是:每隔一天执行一次(`ON SCHEDULE EVERY 1 DAY`),从 2022 年 1 月 1 日 0 点开始执行(`STARTS '2022-01-01 00:00:00'`),对于每次执行(`DO`),执行以下操作:删除所有结束时间早于当前时间的课程记录。
触发器和事件都可以通过 `SHOW TRIGGERS;` 和 `SHOW EVENTS;` 命令来查看。
如果需要调用触发器或事件,可以直接在 SQL 语句中插入相关操作,例如:
```sql
INSERT INTO score (student_id, course_id, score) VALUES (1, 1, 95);
```
这个语句将向 `score` 表中插入一条新记录,并触发 `update_avg_score` 触发器。
```sql
CALL clean_up_course_records;
```
这个语句将调用 `clean_up_course_records` 事件,并执行相应的操作。
阅读全文