创建一个insert_grade_trigger触发器,功能是向grade表中插入平时成绩为空时,把考试成绩置0,如果不为空,则按设定值插入: 然后向grade表中添加一条新信息(s001,0433,null,0.3,null),观察grade表中的结果
时间: 2024-12-04 07:28:23 浏览: 10
创建一个名为`insert_grade_trigger`的SQL触发器,其目的是当往grade表中插入数据时,如果平时成绩(midterm_score)字段为空,那么会自动将考试成绩(final_exam_score)设置为0;如果平时成绩已存在,则保持不变,并将附加分(bonus_score)字段按照预设的值进行插入。以下是触发器的创建语句:
```sql
CREATE TRIGGER insert_grade_trigger
AFTER INSERT ON grade
FOR EACH ROW
BEGIN
IF NEW.midterm_score IS NULL THEN
UPDATE grade
SET final_exam_score = 0
WHERE id = NEW.id;
ELSE
IF NEW.bonus_score IS NOT NULL THEN
-- 如果bonus_score不为空,按设定值插入
-- 这里假设设定值为50,实际应用中应替换为具体的值或者存储过程
UPDATE grade
SET bonus_score = COALESCE(bonus_score, 50)
WHERE id = NEW.id;
END IF;
END IF;
END;
```
现在我们尝试向grade表中添加一条新记录,包括学生ID(s001)、课程ID(0433)、平时成绩、考试成绩和附加分(这里都设为NULL,因为我们要测试触发器的行为):
```sql
INSERT INTO grade (student_id, course_id, midterm_score, final_exam_score, bonus_score)
VALUES ('s001', '0433', NULL, NULL, NULL);
```
执行这个INSERT操作后,如果没有异常发生,grade表中的`s001`的考试成绩会被自动设置为0,而bonus_score(如果有设定值)会被插入50。你可以查询grade表来确认这个变化:
```sql
SELECT * FROM grade WHERE student_id = 's001';
```
阅读全文