利用触发器实现:更新sc表中某个学生的成绩数据,如果bjg_student中有该学生,并且该学生的成绩更新之后还没有及格,则自动更新bjg_student表中该学生的数据,如果更新以后该学生及格了,则在bjg_student表中删除该学生。始终保持sc表中不及格的数据与bjg_student表中的数据一致。
时间: 2024-03-01 17:51:19 浏览: 87
可以使用以下 SQL 语句来创建触发器实现该功能:
```
CREATE TRIGGER trg_update_sc AFTER UPDATE ON sc
FOR EACH ROW
BEGIN
DECLARE v_count INT;
SELECT COUNT(*) INTO v_count FROM bjg_student WHERE sno = NEW.sno;
IF v_count > 0 THEN
UPDATE bjg_student SET score = NEW.score WHERE sno = NEW.sno;
IF NEW.score >= 60 THEN
DELETE FROM bjg_student WHERE sno = NEW.sno;
END IF;
END IF;
END;
```
该触发器在每次更新 sc 表中的数据时被触发。对于每个更新的行,它会检查 bjg_student 表中是否存在该学生,如果存在,则更新该学生的成绩数据。如果该学生及格了,则在 bjg_student 表中删除该学生。由于该触发器是在每次更新时被触发,因此保证了 sc 表中不及格的数据与 bjg_student 表中的数据一致。
相关问题
实战练习 1.创建一个不及格学生表bjg_sc1,包括学号,课程号,成绩字段,数据类型参照sc1表,利用触发器实现:如果向sc1表插入学生的成绩信息如果是不及格,自动将该学生的信息插入到bjg_sc1表中。 2.利用触发器实现:更新sc1表中某个学生的成绩数据,如果bjg_sc1中有该学生,并且该学生的成绩更新之后还没有及格,则自动更新bjg_sc1表中该学生的数据,如果更新以后该学生及格了,则在bjg_sc1表中删除学生。始终保持sc1表中不及格的数据与bjg_sc1表中的数据一致。
好的,我会根据您的要求回答问题。
针对您的第一个问题,以下是实现该需求的触发器代码:
```sql
CREATE TRIGGER trig_insert_bjg_sc1
AFTER INSERT ON sc1
FOR EACH ROW
BEGIN
IF NEW.grade < 60 THEN
INSERT INTO bjg_sc1 VALUES (NEW.sid, NEW.cid, NEW.grade);
END IF;
END;
```
该触发器在每次向sc1表插入数据时触发,判断插入的数据是否不及格,如果不及格则将该学生的信息插入到bjg_sc1表中。
针对您的第二个问题,以下是实现该需求的触发器代码:
```sql
CREATE TRIGGER trig_update_sc1
AFTER UPDATE ON sc1
FOR EACH ROW
BEGIN
DECLARE cnt INT;
SELECT COUNT(*) INTO cnt FROM bjg_sc1 WHERE sid = NEW.sid;
IF cnt > 0 AND NEW.grade < 60 THEN
UPDATE bjg_sc1 SET grade = NEW.grade WHERE sid = NEW.sid;
ELSEIF cnt > 0 AND NEW.grade >= 60 THEN
DELETE FROM bjg_sc1 WHERE sid = NEW.sid;
ELSEIF cnt = 0 AND NEW.grade < 60 THEN
INSERT INTO bjg_sc1 VALUES (NEW.sid, NEW.cid, NEW.grade);
END IF;
END;
```
该触发器在每次更新sc1表中的数据时触发,首先判断该学生是否已经在bjg_sc1表中,如果是,则更新该学生的成绩;如果更新后该学生及格了,则删除该学生在bjg_sc1表中的记录;如果该学生原本不及格,但是更新后及格了,则将该学生的信息插入到bjg_sc1表中。通过该触发器,可以保证sc1表和bjg_sc1表中的不及格学生信息始终保持一致。
c++程序:成绩结果包含 优秀(yx)、良好(lh)、中等(zd)、及格 (jg)、不及格(bjg),使用枚举类型(yxlh zdjg bjg) 顺序(for循环)输出(通过if做转换输出例如将yx转换成优秀输出)考试的成绩等级
在C++中,你可以创建一个枚举类型来表示不同的成绩等级,并使用for循环遍历这个枚举,结合if条件语句进行相应的字符串转换。下面是一个简单的例子:
```cpp
// 定义枚举类型
enum class ExamGrade { yxlh = 'Y', lh = 'L', zd = 'Z', jg = 'J', bjg = 'B' };
void printExamGrade() {
for (ExamGrade grade : ExamGrade) {
switch (grade) {
case ExamGrade::yxlh:
std::cout << "优秀(" << grade << ")"; // 转换并输出
break;
case ExamGrade::lh:
std::cout << "良好(" << grade << ")";
break;
case ExamGrade::zd:
std::cout << "中等(" << grade << ")";
break;
case ExamGrade::jg:
std::cout << "及格(" << grade << ")";
break;
case ExamGrade::bjg:
std::cout << "不及格(" << grade << ")";
break;
}
std::cout << "\n";
}
}
int main() {
printExamGrade();
return 0;
}
```
在这个例子中,枚举的每个成员对应一个具体的字母代表成绩等级,然后在switch块中进行字符串输出。运行这个程序会按照枚举的顺序依次打印出每个等级及其对应的字符串。
阅读全文