创建一个触发器,要求:当往tb_sc表插入数据后,将tb_sc表的记录按照成绩降序排列。
时间: 2023-06-10 20:06:28 浏览: 181
可以使用MySQL中的触发器来实现这个需求。具体实现步骤如下:
1. 创建一个名为“sort_tb_sc_by_score”的触发器,该触发器在往tb_sc表中插入数据后触发。
```
CREATE TRIGGER sort_tb_sc_by_score AFTER INSERT ON tb_sc FOR EACH ROW
```
2. 在触发器中编写SQL语句,实现将tb_sc表的记录按照成绩降序排列的功能。
```
BEGIN
DELETE FROM tb_sc;
INSERT INTO tb_sc SELECT * FROM tb_sc_orig ORDER BY score DESC;
END
```
其中,tb_sc_orig是一个备份表,用于存储tb_sc表原始数据,以便在排序过程中避免数据丢失。触发器执行的操作包括:删除tb_sc表中所有记录,然后从tb_sc_orig表中按照成绩降序排列的顺序将数据插入到tb_sc表中。
3. 测试触发器功能。向tb_sc表中插入一条新记录,然后检查tb_sc表中的记录是否按照成绩降序排列。
```
INSERT INTO tb_sc (student_id, course_id, score) VALUES (1001, 1, 90);
SELECT * FROM tb_sc;
```
如果触发器工作正常,则应该看到tb_sc表中的所有记录按照成绩降序排列。
相关问题
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` 表中对应的学号进行更新。
阅读全文