数据库实验-数据库索引、视图与触发器

更新时间:2023-11-27 10:10:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

石家庄经济学院

实 验 报 告

学 院: 信息工程学院 专 业: 网络工程

信息工程学院计算机实验中心制

学号 411109030110 姓名 马立杰 指导教师 实验日期 2014-4-28 张有华 设备编号 22 实验室 260实验室 实验内容 实验4 数据库索引、视图与触发器 一 实验题目 1.索引的建立和删除操作

2.视图的创建、修改、更新和查询操作

二 实验目的

1.掌握数据库索引建立与删除操作,掌握数据库索引的分类,并了解建立数据库索引的意义、作用。

2.掌握视图的创建和查询操作,理解视图的使用,理解实图在数据库安全性中的作用。

三 实验内容

1. 索引的建立和删除操作

(1) 在S表中,建立按照sno升序的惟一性索引snoIDX。

(2) 在SC表中,建立按照学号升序和课程号降序的唯一性索引scIDX。 (3) 在S表中,按照生日建立一个非聚簇索引birthdayIDX。

(4) 在C表中,建立一个按照课程名升序的聚簇索引cnameIDX。 (5) 删除索引cnameIDX。

2. 视图的创建、修改、更新和查询操作

(1) 建立一个关于所有女生信息的视图S_GIRL。

(2) 将各系学生人数,平均年龄定义为视图V_NUM_AVG

(3) 建立一个视图反映学生所选课程的总学分情况TOTAL_CREDIT。

(4) 建立一个所有学生课程成绩的视图S_GRADE,包括基本学生信息,课程信息和成绩。

(5) 在视图S_GRADE基础之上,建立一个两门课以上成绩不及格的学生情况视图FAIL_GRADE。 (6) 建立一个至少选修了4门课及4门课以上的学生信息的视图SC_FOUR。

(7) 修改视图S_GIRL,要求只显示1997年以前出生的女生信息。 (8) 在视图FAIL_GRADE查询不及格超过2门课的学生信息。 (9) 删除视图S_GRADE。

(10) 通过视图S_GIRL,将“王丹”的名字修改为“汪丹”,并查询结果。 (11) 通过视图S_GIRL,新增一个学生信息(“刘兰兰”,“女”,“计算机学院”,1996-8-8),并查询

结果。 (12) 通过视图S_GIRL,删除1995年出生的女生信息,并查询结果。 (13) 通过视图S_GRADE,将“汪丹”的名字修改为“王丹”,是否可以实现,请说明原因。 (14) 通过视图COMPUTE_AVG_GRADE,将“4121090301”学生的平均分改为90分,是否可以实

现,请说明原因。

四 实验要求

1. 要求掌握索引的类型,以及创建索引时的注意事项,例如每个表只能创建一个聚集索引,可以创建非聚集索引最多为249个,等等。 2. 理解创建视图的目的和意义。掌握创建视图时需要考虑的原则:只能在当前数据库中创建视图、

视图名不得与该用户的表名相同、可在视图上建立视图、定义视图不能包括ORDER BY等关键字、不能建立临时视图,等等。

3. 报告中由同学写明具体的操作意图(文字描述)、操作命令(SQL语句)、和执行结果(文字

描述+适当截图)。

4. 对于重要的运行界面和结果窗口,可以用Alt+PrintScreen来截取当前窗口,并粘贴到实验报告中。

五 实验步骤

1. 索引的建立和删除操作

(1) 在STU表中,建立按照sno升序的惟一性索引snoIDX。

SQL语句为:create unique index snoIDX on STU(Sno); 运行结果如1- 1按所示: 命令已成功完成。

图1- 1按学号升序建立的唯一性索引

(2) 在SC表中,建立按照学号升序和课程号降序的唯一性索引scIDX。

SQL语句为:create unique index scIDX on SC(Sno ASC,Cno DESC); 运行结果如1- 2按所示: 命令已成功完成。

图1- 2按学号升序课程号降序建立索引

(3) 在S表中,按照生日建立一个非聚簇索引birthdayIDX。

SQL语句为:create nonclustered index birthdayIDX on STU(Sbirthday); 执行结果如1- 3对所示: 命令已成功完成。

图1- 3对生日建立非聚簇索引

(4) 在Course表中,建立一个按照课程名升序的聚簇索引cnameIDX。

SQL语句为:create clustered index cnameIDX on Course(Cname); 运行结果如1- 4按所示: 命令已成功完成。

图1- 4按课程名升序建立聚簇索引

(5) 删除索引cnameIDX。

SQL语句为:drop index Course.cnameIDX; 运行结果如1- 5删所示: 表中索引cnameIDX不存在。

图1- 5删除cnameIDX索引

2. 视图的创建、修改、更新和查询操作

(1) 建立一个关于所有女生信息的视图STU_GIRL。

SQL语句为:

create view STU_GIRL(Sno,SID,Sname,Ssex,Sbirthday,Sdept,Saddress,Smajor) as

select * from STU

where Ssex='女'

运行结果如1- 6建所示: 命令已成功完成。

图1- 6建立女生信息的视图

(2) 将各系学生人数,平均年龄定义为视图V_NUM_AVG

SQL语句为:

create view V_NUM_AVG(Sdept,STU_count,A_avg) as

select Sdept,count(Sdept),avg(datediff(year,Sbirthday,getdate())) from STU

group by Sdept

执行结果如1- 7建所示:

图1- 7建立视图V_NUM_AVG

(3) 建立一个视图反映学生所选课程的总学分情况TOTAL_CREDIT。

SQL语句为:

create view TOTAL_CREDIT(Sno,sum_credit) as

select SC.Sno,sum(Ccredit) from SC,Course

where SC.Cno=Course.Cno group by SC.Sno

执行结果如1- 8建所示:

图1- 8建立视图TOTAL_CREDIT

(4) 建立一个所有学生课程成绩的视图STU_GRADE,包括基本学生信息,课程信息和成绩。

SQL语句为:

create view STU_GRADE as

select STU.*,Course.*,SC.Sgrade from SC

full join STU on SC.Sno=STU.Sno full join Course on Course.Cno=SC.Cno 运行结果如1- 9所所示:

图1- 9所有学生课程信息视图

(5) 在视图S_GRADE基础之上,建立一个两门课以上成绩不及格的学生情况视图FAIL_GRADE。

SQL语句为:

create view FAIL_GRADE as

select Sno,SID,Sname,Ssex,Sbirthday,Sdept,Saddress,Smajor,count(Cno) as STU_count from STU_GRADE where Grade<60

group by Sno,SID,Sname,Ssex,Sbirthday,Sdept,Saddress having count(Cno)>=2 运行结果如1- 10建所示:

图1- 10建立视图FAIL_GRADE

(6) 建立一个至少选修了4门课及4门课以上的学生信息的视图SC_FOUR。

SQL语句为:

create view SC_FOUR as

select STU.* from STU where Sno in( select Sno from SC group by Sno

having count(SC.Sno)>=4 )

运行结果如1-11所示:

图1- 11建立至少选修4门课程的学生信息视图

(7) 修改视图S_GIRL,要求只显示1997年以前出生的女生信息。

SQL语句为:

create view STU_GIRL(Sno,SID,Sname,Ssex,Sbirthday,Sdept,Saddress) as

select * from STU

where Ssex='女' and datepart(year,Sbirthday)<1997 运行结果如1- 12修所示:

图1- 12修改S_GIRL视图信息

(8) 在视图FAIL_GRADE查询不及格超过2门课的学生信息。

本文来源:https://www.bwwdw.com/article/u6qt.html

Top