有sc表,student表,course表#当向sc表插入一行数据时,根据成绩对student表的总学分进行修改,如果成绩大于60,则总学分加上该课程的学分
时间: 2024-04-02 22:34:23 浏览: 131
可以使用如下的SQL语句实现:
```
INSERT INTO sc (student_id, course_id, score) VALUES (1, 1001, 80);
UPDATE student
SET total_credit =
CASE
WHEN (SELECT score FROM sc WHERE student_id = 1 AND course_id = 1001) > 60
THEN total_credit + (SELECT credit FROM course WHERE id = 1001)
ELSE total_credit
END
WHERE id = 1;
```
这个语句做了以下几件事情:
1. 向sc表中插入一行数据,其中学生id为1,课程id为1001,成绩为80。
2. 根据学生id和课程id从sc表中查询出成绩。
3. 如果成绩大于60,则从course表中查询出该课程的学分,并将学生的总学分加上该学分。
4. 将修改后的总学分更新到student表中对应的学生记录中。
相关问题
mysql创建触发器,实现当向SC表插入一行数据时,根据成绩对student表的总学分进行修改。如果成绩>=60,总学分加上该课程的学分,否则总学分不变。
好的,这是一个关于MySQL触发器的问题。这里是一个实现该功能的MySQL触发器的示例代码:
```
CREATE TRIGGER update_credit AFTER INSERT ON SC
FOR EACH ROW
BEGIN
IF NEW.grade >= 60 THEN
UPDATE student
SET total_credit = total_credit + (SELECT credit FROM course WHERE course_id = NEW.course_id)
WHERE student_id = NEW.student_id;
END IF;
END;
```
这个触发器会在SC表中插入一行数据时自动触发。如果这行数据的成绩(grade)大于等于60,那么它会查找对应课程的学分(credit),并将该学分加到student表中对应学生的总学分(total_credit)上。如果成绩小于60,总学分不会发生变化。
基于school数据库中的student, course, sc表,在SQL数据库中创建满足下述要求的触发器:对SC表进行插入时,如果学生的选课总学分超过30,则报错并撤销插入。
好的,这是一个有趣的问题。以下是可以在MySQL数据库中创建的触发器代码:
```
CREATE TRIGGER check_sc BEFORE INSERT ON sc
FOR EACH ROW
BEGIN
DECLARE total_credits INT;
SELECT SUM(credit) INTO total_credits FROM course WHERE cno = NEW.cno;
SELECT SUM(credit) INTO total_credits FROM sc WHERE sno = NEW.sno;
IF (total_credits > 30) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '选课总学分超过30';
END IF;
END;
```
该触发器会在每次向SC表中插入新记录之前被触发。它会计算该学生所选课程的总学分,并检查该总学分是否超过了30。如果超过了30,则会报错并撤销插入。这可以通过使用SIGNAL语句来实现,该语句会抛出一个异常,并显示指定的错误消息。
阅读全文