2(1)创建触发器sc_delete,当删除student表中的一条学生记录时,自动删除score表中对应学生的选课记录。 (2) 删除student表中的一条学生记录,验证触发器的作用。
时间: 2024-03-27 21:37:46 浏览: 72
1. 创建触发器:
```sql
CREATE TRIGGER sc_delete
AFTER DELETE ON student
FOR EACH ROW
BEGIN
DELETE FROM score WHERE student_id = OLD.student_id;
END;
```
2. 删除student表中的一条学生记录:
```sql
DELETE FROM student WHERE student_id = 1;
```
执行这个语句后,触发器会自动删除score表中对应学生的选课记录。可以通过以下语句验证:
```sql
SELECT * FROM score WHERE student_id = 1;
```
如果没有返回任何结果,说明触发器生效了,score表中对应学生的选课记录已被删除。
相关问题
2. 创建一个触发器trigger_t1,当删除表student中某个学生的信息时,同时将sc表中与该学生有关的数据全部删除。 (1) 第一步创建触发器trigger_t1 (2) 第二步向student表插入数据('95006','小赵','M',19,'IS'),向sc表插入数据('95006',2,91.0) (3) 第三步查看student表和sc表 (4) 第四步从student表中删除学号为95006的学生信息 (5) 第五步再次查看student表和sc表学号为95006的学生信息是否删除成功
以下是在 SQL Server 中创建触发器,插入数据,查看数据,删除数据并验证的步骤:
1. 创建触发器:
```
CREATE TRIGGER trigger_t1
ON student
AFTER DELETE
AS
BEGIN
DELETE FROM sc WHERE sid IN (SELECT deleted.sid FROM deleted);
END;
```
2. 向 student 表和 sc 表中插入数据:
```
INSERT INTO student (sid, sname, ssex, sage, sdept)
VALUES ('95006', '小赵', 'M', 19, 'IS');
INSERT INTO sc (sid, cid, score)
VALUES ('95006', 2, 91.0);
```
3. 查看 student 表和 sc 表:
```
SELECT * FROM student;
SELECT * FROM sc;
```
4. 删除学号为 95006 的学生信息:
```
DELETE FROM student WHERE sid = '95006';
```
5. 再次查看 student 表和 sc 表:
```
SELECT * FROM student;
SELECT * FROM sc;
```
可以看到,触发器成功删除了与学号为 95006 的学生相关的 sc 表中的记录。同时,student 表中的学生信息也被删除了。
完成MySQL实验:1.利用触发器实现:向student表中添加一条学生信息时,显示提示信息; 2.修改student表,添加一个字段班号,数据类型为varchar(10),创建一个班级表class(班号,所在系,专业,人数),数据类型自定,并录入一定的数据。利用触发器实现:向student表添加一行数据,班级表中对应班级的人数加一,向student表中删除一行数据,班级表中对应班级的人数减一。 3.利用触发器实现:删除student表中某个学生的信息,也会删除sc表中的该学生的所有课程的成绩信息。 4.创建一个不及格学生表bjg_student,包括学号,课程号,成绩字段,数据类型参照sc表,利用触发器实现:如果向sc表插入学生成绩信息不及格,自动将该学生的信息插入到bjg_student中。 5.利用触发器实现:更新sc表中某个学生的成绩数据,如果bjg_student中有该学生,并且该学生的成绩更新之后还没有及格,则自动更新bjg_student表中该学生的数据,如果更新以后该学生及格了,则在bjg_student表中删除该学生。始终保持sc表中不及格的数据与bjg_student表中的数据一致。
1. 利用触发器实现向student表中添加一条学生信息时显示提示信息:
```mysql
DELIMITER //
CREATE TRIGGER insert_student_trigger
AFTER INSERT
ON student
FOR EACH ROW
BEGIN
SELECT CONCAT('New student added with id ', NEW.id) AS message;
END//
DELIMITER ;
```
2. 修改student表,添加一个字段班号,数据类型为varchar(10),创建一个班级表class(班号,所在系,专业,人数),数据类型自定,并录入一定的数据。利用触发器实现:
向student表添加一行数据,班级表中对应班级的人数加一,向student表中删除一行数据,班级表中对应班级的人数减一。
```mysql
-- 修改student表
ALTER TABLE student ADD class_no VARCHAR(10);
-- 创建班级表
CREATE TABLE class (
class_no VARCHAR(10) PRIMARY KEY,
department VARCHAR(50),
major VARCHAR(50),
num_of_students INT
);
-- 录入数据
INSERT INTO class (class_no, department, major, num_of_students) VALUES
('001', 'Computer Science', 'Software Engineering', 50),
('002', 'Computer Science', 'Information Security', 45);
-- 定义触发器
DELIMITER //
CREATE TRIGGER insert_student_trigger
AFTER INSERT
ON student
FOR EACH ROW
BEGIN
UPDATE class
SET num_of_students = num_of_students + 1
WHERE class_no = NEW.class_no;
END//
CREATE TRIGGER delete_student_trigger
BEFORE DELETE
ON student
FOR EACH ROW
BEGIN
UPDATE class
SET num_of_students = num_of_students - 1
WHERE class_no = OLD.class_no;
END//
DELIMITER ;
```
3. 利用触发器实现:删除student表中某个学生的信息,也会删除sc表中的该学生的所有课程的成绩信息。
```mysql
DELIMITER //
CREATE TRIGGER delete_student_trigger
AFTER DELETE
ON student
FOR EACH ROW
BEGIN
DELETE FROM sc
WHERE student_id = OLD.id;
END//
DELIMITER ;
```
4. 创建一个不及格学生表bjg_student,包括学号、课程号、成绩字段,数据类型参照sc表,利用触发器实现:如果向sc表插入学生成绩信息不及格,自动将该学生的信息插入到bjg_student中。
```mysql
-- 创建不及格学生表
CREATE TABLE bjg_student (
student_id INT,
course_id INT,
score FLOAT
);
-- 定义触发器
DELIMITER //
CREATE TRIGGER insert_sc_trigger
AFTER INSERT
ON sc
FOR EACH ROW
BEGIN
IF NEW.score < 60 THEN
INSERT INTO bjg_student (student_id, course_id, score)
VALUES (NEW.student_id, NEW.course_id, NEW.score);
END IF;
END//
DELIMITER ;
```
5. 利用触发器实现:更新sc表中某个学生的成绩数据,如果bjg_student中有该学生,并且该学生的成绩更新之后还没有及格,则自动更新bjg_student表中该学生的数据,如果更新以后该学生及格了,则在bjg_student表中删除该学生。始终保持sc表中不及格的数据与bjg_student表中的数据一致。
```mysql
-- 定义触发器
DELIMITER //
CREATE TRIGGER update_sc_trigger
AFTER UPDATE
ON sc
FOR EACH ROW
BEGIN
IF NEW.score < 60 THEN
INSERT INTO bjg_student (student_id, course_id, score)
VALUES (NEW.student_id, NEW.course_id, NEW.score)
ON DUPLICATE KEY UPDATE score = NEW.score;
ELSE
DELETE FROM bjg_student
WHERE student_id = NEW.student_id AND course_id = NEW.course_id;
END IF;
END//
DELIMITER ;
```
阅读全文