用AFTER触发器实现选课人数自减功能,实现当在表TB_SelectCourse上删除选课记录时,自动将对应课程班TB_CourseClass表中的已选学生人数(SelectedNumber)减1。
时间: 2024-05-07 18:22:48 浏览: 20
可以使用如下的 AFTER DELETE 触发器来实现这个功能:
```sql
CREATE TRIGGER trg_TB_SelectCourse
AFTER DELETE
ON TB_SelectCourse
FOR EACH ROW
BEGIN
UPDATE TB_CourseClass
SET SelectedNumber = SelectedNumber - 1
WHERE CourseClassID = OLD.CourseClassID;
END;
```
这个触发器会在每次从 `TB_SelectCourse` 表中删除记录时自动执行。它会将对应课程班的 `SelectedNumber` 字段减去 1,以实现选课人数自减的功能。
需要注意的是,在这个触发器中使用了 `OLD` 关键字来引用被删除的记录。`OLD.CourseClassID` 表示被删除记录的 `CourseClassID` 字段值,即对应课程班的 ID。通过这个值,我们可以更新对应课程班的选课人数。
相关问题
TB_Dept(DeptID,DeptName,DeptSetDate) TB_Teacher(TeacherID,TeacherName,DeptID,Sex,Birthday) TB_Class(ClassID,ClassName,DeptID,TeacherID) TB_Student(StuID,StuName,DeptID,ClassID,Sex,Birthday) TB_Course(CourseID,CourseName,DeptID,CourseGrade,LessonTime, CourseOutline) TB_CourseClass(CourseClassID,CourseID,TeacherID,CommonPart,MiddlePart,LastPart) TB_SelectCourse(StuID,CourseClassID,SelectDate) TB_Grade(StuID,ClassID,CourseClassID,CourseID,CommonScore,MiddleScore,LastScore,TotalScore,RetestScore) 根据上面的表,用AFTER触发器实现选课人数自减功能,实现当在表TB_SelectCourse上删除选课记录时,自动将对应课程班TB_CourseClass表中的已选学生人数(SelectedNumber)减1。要验证
可以使用以下的 SQL 代码来实现:
```sql
CREATE TRIGGER tr_select_course_delete AFTER DELETE ON TB_SelectCourse
FOR EACH ROW
BEGIN
UPDATE TB_CourseClass
SET SelectedNumber = SelectedNumber - 1
WHERE CourseClassID = OLD.CourseClassID;
END;
```
这个触发器会在 `TB_SelectCourse` 表有记录被删除时被触发。它会自动将对应的课程班的选课人数减一。要验证这个触发器是否能够正常工作,可以执行以下的测试代码:
```sql
-- 先插入一条选课记录
INSERT INTO TB_SelectCourse(StuID, CourseClassID, SelectDate)
VALUES ('001', '001', '2021-01-01');
-- 验证选课人数是否为1
SELECT SelectedNumber FROM TB_CourseClass WHERE CourseClassID = '001';
-- 删除选课记录
DELETE FROM TB_SelectCourse WHERE StuID = '001';
-- 再次验证选课人数是否为0
SELECT SelectedNumber FROM TB_CourseClass WHERE CourseClassID = '001';
```
执行上面的代码,如果触发器正常工作,最终应该会输出两次查询结果都是 0,表示选课人数已经被自动减一了。
TB_Dept(DeptID,DeptName,DeptSetDate) TB_Teacher(TeacherID,TeacherName,DeptID,Sex,Birthday) TB_Class(ClassID,ClassName,DeptID,TeacherID) TB_Student(StuID,StuName,DeptID,ClassID,Sex,Birthday) TB_Course(CourseID,CourseName,DeptID,CourseGrade,LessonTime, CourseOutline) TB_CourseClass(CourseClassID,CourseID,TeacherID,CommonPart,MiddlePart,LastPart) TB_SelectCourse(StuID,CourseClassID,SelectDate) TB_Grade(StuID,ClassID,CourseClassID,CourseID,CommonScore,MiddleScore,LastScore,TotalScore,RetestScore) 根据上面的表,1、创建一个AFTER型语句级触发器,当对学生表执行插入操作时,统计插入操作后学生的最小年龄并输出;当对学生表执行更新操作时,统计更新后学生的平均年龄并输出;当对学生表执行删除操作时,统计删除后学生的总人数并输出(参考后面例题)。要验证 2、用AFTER触发器实现选课人数自减功能,实现当在表TB_SelectCourse上删除选课记录时,自动将对应课程班TB_CourseClass表中的已选学生人数(SelectedNumber)减1。要验证 3、在TB_Class表中加一字段ClassNumber以记录班级人数,设计一触发器,要求在TB_Student中加入学生时,自动将对应班级表中的ClassNumber加1。 4、在TB_Student中加一字段TotalGrade,创建一个触发器,当向TB_Grade表插入记录后,如果成绩非空则在该学生的TotalGrade中自动加上该门课程的得分。
1、触发器代码如下:
CREATE TRIGGER tr_stu_insert_update_delete
AFTER INSERT OR UPDATE OR DELETE ON TB_Student
BEGIN
IF (SELECT COUNT(*) FROM TB_Student) > 0 THEN -- 防止除零错误
CASE
WHEN INSERTING THEN -- 插入操作
SELECT MIN(strftime('%Y', 'now') - strftime('%Y', Birthday)) AS "插入后最小年龄" FROM TB_Student;
WHEN UPDATING THEN -- 更新操作
SELECT AVG(strftime('%Y', 'now') - strftime('%Y', Birthday)) AS "更新后平均年龄" FROM TB_Student;
WHEN DELETING THEN -- 删除操作
SELECT COUNT(*) AS "删除后学生总人数" FROM TB_Student;
END CASE;
END IF;
END;
2、触发器代码如下:
CREATE TRIGGER tr_select_course_delete
AFTER DELETE ON TB_SelectCourse
BEGIN
UPDATE TB_CourseClass SET SelectedNumber = SelectedNumber - 1 WHERE CourseClassID = OLD.CourseClassID;
END;
3、触发器代码如下:
CREATE TRIGGER tr_stu_insert_classnumber
AFTER INSERT ON TB_Student
BEGIN
UPDATE TB_Class SET ClassNumber = ClassNumber + 1 WHERE ClassID = NEW.ClassID;
END;
4、触发器代码如下:
CREATE TRIGGER tr_grade_insert_totalgrade
AFTER INSERT ON TB_Grade
BEGIN
UPDATE TB_Student SET TotalGrade = TotalGrade + NEW.TotalScore WHERE StuID = NEW.StuID;
END;
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)