一、触发器语法了解:
学生数据库由三张表组成:xsqk、xskc、xscj,各个表的结构如下:
表1 xsqk结构
列名 |
数据类型 |
长度 |
允许空值 |
说明 |
系别 |
Char |
10 |
√ |
|
班级 |
Char |
12 |
√ |
|
专业 |
Varchar |
30 |
√ |
|
学号 |
Char |
8 |
× |
主键 |
姓名 |
Char |
8 |
× |
|
性别 |
Char |
2 |
√ |
默认值:男 |
出生年月 |
Smalldatetime |
4 |
√ |
|
总学分 |
Tinyint |
1 |
√ |
|
备注 |
Text |
16 |
√ |
|
表2 xskc结构
列名 |
数据类型 |
长度 |
允许空值 |
说明 |
课程号 |
Char |
3 |
× |
主键 |
课程名 |
Char |
16 |
× |
|
开课学期 |
Tinyint |
1 |
× |
规则:1~8 |
学时 |
Tinyint |
1 |
× |
|
学分 |
Tinyint |
1 |
√ |
|
表3 xscj结构
列名 |
数据类型 |
长度 |
允许空值 |
说明 |
学号 |
Char |
8 |
× |
主键 |
课程号 |
Char |
3 |
× |
主键 |
成绩 |
Tinyint |
1 |
√ |
|
学分 |
Tinyint |
1 |
√ |
|
表4 学生情况表(xsqk)数据样本
系别 |
班级 |
专业 |
学号 |
姓名 |
性别 |
出生年月 |
总学分 |
备注 |
计算机 |
计算机0203 |
计算机应用与维护 |
02020101 |
王玲玲 |
女 |
1981-8-26 |
9 |
|
计算机 |
计算机0203 |
计算机应用与维护 |
02020102 |
张燕红 |
女 |
1981-10-20 |
9 |
|
计算机 |
计算机0203 |
计算机应用与维护 |
02020103 |
杨勇 |
男 |
1982-3-15 |
|
|
计算机 |
计算机0203 |
计算机应用与维护 |
02020104 |
王红庆 |
男 |
1983-5-17 |
|
|
计算机 |
计算机0203 |
计算机应用与维护 |
02020105 |
陈园 |
女 |
1982-4-12 |
|
|
计算机 |
信息管理0201 |
信息管理 |
02020201 |
黄薇娜 |
女 |
1983-8-19 |
8 |
|
计算机 |
信息管理0201 |
信息管理 |
02020202 |
沈昊 |
男 |
1982-3-18 |
8 |
|
计算机 |
信息管理0201 |
信息管理 |
02020203 |
傅亮达 |
男 |
1983-1-22 |
|
|
计算机 |
信息管理0201 |
信息管理 |
02020204 |
任建刚 |
男 |
1981-12-21 |
|
|
计算机 |
信息管理0201 |
信息管理 |
02020205 |
叶小红 |
女 |
1983-7-16 |
|
|
表5 学生课程表(xskc)数据样本
课程号 |
课程名 |
开课学期 |
学时 |
学分 |
101 |
计算机文化基础 |
1 |
86 |
4 |
102 |
Qbasic |
1 |
68 |
4 |
205 |
离散数学 |
3 |
64 |
4 |
206 |
VC |
2 |
68 |
4 |
208 |
数据结构 |
2 |
68 |
4 |
210 |
操作系统 |
3 |
64 |
4 |
212 |
计算机组成 |
4 |
86 |
5 |
216 |
数据库原理 |
2 |
68 |
4 |
301 |
计算机网络 |
5 |
56 |
3 |
表6 学生成绩表(xscj)数据样本
学号 |
课程号 |
成绩 |
学分 |
02020101 |
101 |
85 |
4 |
02020101 |
102 |
70 |
5 |
02020102 |
101 |
90 |
4 |
02020102 |
102 |
80 |
5 |
02020201 |
101 |
86 |
4 |
02020201 |
208 |
80 |
4 |
02020202 |
208 |
50 |
4 |
02020202 |
216 |
60 |
4 |
对数据库操作及相关sql语句如下:
1、在学生成绩库中创建触发器trigger1,实现如下功能:当在学生成绩表(xscj)中插入一条学生选课信息后,自动实现更新该学生在学生情况表(xsqk)中的总学分信息。
分析:根据题意,要求在学生成绩表中插入一条记录时,自动更新学生情况表中的相应记录信息。可以通过在学生成绩表中定义INSERT类型的触发器,触发器中语句要完成的功能是更新学生情况表中的相应学生的总学分信息。其实,只要在该生原总学分基础上加上新选课程的学分就可以了。
在学生成绩表中插入一条记录后,可以在学生情况表中看到学号为2020202的学生的总学分由原来的8变成了现在的12。
2、创建触发器trigger3,实现当删除学生课程表中某门课程的记录时,对应学生成绩表中所有有关此课程的记录均删除。
删除计算机文化基础后,可以看到在xscj表中,相应的记录被删除。
3、创建触发器trigger4,实现当修改学生课程表(xskc)中的某门课的课程号时,对应学生成绩表(xscj)中的课程号也作相应修改。
如下图,将学生课程表中Qbasic课程的课程号改为505后,在xscj中的课程号也发生改变,变成了505
4、创建触发器trigger5,实现当向学生成绩表(xscj)中插入一条选课记录时,查看该学生的信息是否存在在学生信息表中,如果不存在,则把该学生的基本信息加入到学生信息表中。
使用以上语句,因为在xscj表中只可能插入学生的学号,而在更新xsqk表时,发现姓名是不能为空的,所以在触发器处设定姓名为“未知”。在xscj表中插入了一条学号为4444444的记录后,在xsqk表中,可以看到增加了一条相应的记录。