一个sc表有数据,现在在这个表中建立一个触发器,当删除sc表某行数据时,把删除的这行数据移到一个和sc属性结构完全相同的表sc2中
时间: 2024-05-01 14:23:37 浏览: 64
可以使用以下SQL语句创建一个触发器来实现:
```sql
CREATE TRIGGER trg_delete_sc
AFTER DELETE ON sc
FOR EACH ROW
BEGIN
INSERT INTO sc2 VALUES (OLD.s_id, OLD.c_id, OLD.score);
END;
```
该触发器会在每次从sc表中删除数据时被触发。对于每一行被删除的数据,它会将数据插入到sc2表中,保证插入的数据与sc表的属性结构完全相同。其中,OLD是一个伪行记录器,它包含了触发器所在表(这里是sc表)中被删除的行的原始数据。通过引用OLD.s_id、OLD.c_id、OLD.score来获取被删除数据的各个属性值。
相关问题
创建一个delete_s_trigger触发器,当删除s表中某学生记录时,同时删除sc表中相应的所有选修课程记录: 然后删除0529赵欣同学时,观察sc表中的结果
创建一个名为`delete_s_trigger`的SQL级联删除(Cascade Delete)触发器,可以确保在删除`s`表中特定学生记录的同时,自动删除`s`表与`SC`表之间的关联记录。在这种模式下,当你删除`s`表中的学生,`SC`表中对应的学生的所有课程记录都会被删除。这种设置通常在两个表之间有依赖关系时使用。
首先,你需要确保`s`表和`SC`表之间有一个外键约束,比如`s_id`字段指向`s`表的主键,以便启用级联删除。以下是创建触发器的示例:
```sql
CREATE TRIGGER delete_s_trigger
AFTER DELETE ON s
FOR EACH ROW
WHEN MATCHED BY (DELETE_ID = OLD.ID) DO
BEGIN
DELETE FROM SC WHERE s_id = OLD.ID;
END;
```
这里假设`s`表有一个`ID`字段,并且我们在`SC`表中有一个`s_id`字段用于引用`s`表的记录。
现在我们尝试删除赵欣同学(0529),即执行以下命令:
```sql
DELETE FROM s WHERE ID = 0529;
```
删除操作完成后,你可以通过查询`SC`表来查看赵欣同学的课程记录是否已经被删除:
```sql
SELECT * FROM SC WHERE s_id IN (SELECT ID FROM s WHERE ID = 0529);
```
如果没有返回任何结果,说明`delete_s_trigger`触发器已经成功地删除了`SC`表中与0529相关的所有记录。
完成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 ;
```
阅读全文