创建一个触发器,要求:当往tb_sc表插入数据后,将tb_sc表的记录按照成绩降序排列。
时间: 2023-06-12 17:06:07 浏览: 162
可以使用MySQL数据库中的触发器实现该需求,具体代码如下:
```mysql
CREATE TRIGGER `order_sc` AFTER INSERT ON `tb_sc` FOR EACH ROW
BEGIN
SELECT * FROM tb_sc ORDER BY score DESC;
END
```
该触发器会在每次往tb_sc表中插入数据后触发,然后对tb_sc表的数据进行一次成绩降序排列,并将排列后的结果输出。注意,这里的操作只是输出排列后的结果,不会对表中的数据进行修改。如果需要修改表中的数据,请使用UPDATE语句。
相关问题
4)创建一个触发器,要求:当往tb_sc表插入数据之后,对于插入记录中的课程号,保证如果没有选修其先修课程,则不能选修该课程;使用SQL语句激活触发器。
可以使用如下的 SQL 语句创建触发器:
```sql
CREATE TRIGGER trg_check_prerequisite
AFTER INSERT ON tb_sc
FOR EACH ROW
BEGIN
DECLARE prerequisite INT; -- 先修课程号
SELECT prerequisite INTO prerequisite FROM tb_course WHERE course_num = NEW.course_num;
-- 检查是否存在先修课程
IF prerequisite IS NOT NULL AND
NOT EXISTS (SELECT * FROM tb_sc WHERE student_id = NEW.student_id AND course_num = prerequisite) THEN
DELETE FROM tb_sc WHERE student_id = NEW.student_id AND course_num = NEW.course_num;
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You have not completed the prerequisite course.';
END IF;
END;
```
这个触发器会在向 `tb_sc` 表插入数据后触发,对于插入记录中的课程号,会检查该课程是否有先修课程。如果存在先修课程,就检查该学生是否已经选修了先修课程,如果没有选修则会删除当前插入的这条记录,并抛出一个错误信息。这样就可以保证如果没有选修先修课程,则不能选修该课程。
要激活这个触发器,可以使用如下的 SQL 语句:
```sql
ALTER TABLE tb_sc ENABLE TRIGGER trg_check_prerequisite;
```
5)创建一个触发器,要求:如果在tb_student表中修改了学号,则自动修改tb_sc表中的学号;使用SQL语句修改tb_student表中学号,观察触发器是否触发,即查看tb_sc表中的学号是否修改。(注意:如果tb_sc表中的sno定义了外码,应先使用ALTER TABLE命令先删除外码)
可以使用如下的 SQL 语句创建触发器:
```sql
CREATE TRIGGER trg_update_sc_sno
AFTER UPDATE ON tb_student
FOR EACH ROW
BEGIN
UPDATE tb_sc SET student_id = NEW.student_id WHERE student_id = OLD.student_id;
END;
```
这个触发器会在 `tb_student` 表中更新学号后触发,会自动将 `tb_sc` 表中对应的学号进行更新。
如果 `tb_sc` 表中的 `student_id` 字段定义了外键,需要先使用 `ALTER TABLE` 命令删除外键,例如:
```sql
ALTER TABLE tb_sc DROP FOREIGN KEY fk_sc_student;
```
然后可以使用如下的 SQL 语句修改 `tb_student` 表中的学号,观察触发器是否触发:
```sql
UPDATE tb_student SET student_id = '20210001' WHERE student_id = '20200001';
```
这个语句会将学号为 `20200001` 的记录的学号修改为 `20210001`,同时会触发上面创建的触发器,自动将 `tb_sc` 表中对应的学号进行更新。
阅读全文
相关推荐













