数据库原理及应实验指导书.docx
- 文档编号:30385467
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:16
- 大小:20.20KB
数据库原理及应实验指导书.docx
《数据库原理及应实验指导书.docx》由会员分享,可在线阅读,更多相关《数据库原理及应实验指导书.docx(16页珍藏版)》请在冰豆网上搜索。
数据库原理及应实验指导书
数据库原理与应用
综合性实验指导书
数据库理论及应用教研室
2009.8
目录
实验1DDL语言的应用1
实验2DML语言的应用5
实验3数据库查询语言的应用
(一)7
实验4数据库查询语言的应用
(二)8
实验5DCL语言的应用、备份和恢复10
实验6存储过程与触发器的应用11
实验1DDL语言的应用
实验目的:
本次实验,要求学生在SQLServer2000中创建学生信息管理数据库;创建学生基本信息表、课程基本信息表以及学生_课程表。
要求学生为学生信息管理数据库的学生基本信息表、课程基本信息表以及学生_课程表根据已经确定的主码,为这三个表之间建立关联。
根据需求,建立必要的索引、视图等数据库对象。
实验内容:
1)创建学生信息管理数据库,创建student库,数据文件初始为10MB,最大空间为20MB,文件自动增长为10%,日志文件初始大小为2MB,最大空间10MB,文件的增长率为10MB。
2)创建表、确定表的主码和约束条件,表的数据字典如下诸表所示。
SUDENT表的结构
列名
说明
数据类型
约束
Sno
学号
字符串,长度7
主码
Sname
姓名
字符串,长度10
非空
Ssex
性别
长度,字符串2
取”男”或”女”
Sage
年龄
整数
取值15~45
Sdept
所在系
字符串
默认值”计算机系”
COURSE表的结构
列名
说明
数据类型
约束
Cno
课程号
字符串,长度10
主码
Cname
课程名
字符串,长度20
非空
Ccredit
学分
整数
取值>0
Semster
开课学期
整数
取值>0
Period
学时
整数
取值>0
SC表的结构
列名
说明
数据类型
约束
Sno
学号
字符串,长度7
主码,引用Student的外码
Cno
课程号
字符串,长度10
主码,引用Course的外码
Grade
成绩
整数
取值0~100
3)熟悉SQLServerEnterpriserManager工具的使用方法。
4)为基本表STUDENT、COURSE、SC建立基于主码的聚簇索引。
5)为基本表STUDENT、COURSE、SC建立非聚簇索引,索引字段自由确定。
6)建立符合要求的数据库视图。
7)为基本表建立关系图。
(本部分实验内容可以补写入实验报告)
实验步骤:
第一步启动SQLServer2000QueryAnalyzer,输入如下代码:
CREATEDATABASESTUDENT
ON
(NAME=STUDENT_DATA,
FILENAME='C:
\programfiles\MicrosoftSQLServer\Mssql\Data\STUDENT.mdf',
SIZE=10,
MAXSIZE=20,
FILEGROWTH=10%)
LOGON
(NAME=STUDENT_LOG,
FILENAME='C:
\programfiles\MicrosoftSQLServer\Mssql\Data\STUDENT.ldf',
SIZE=2,
MAXSIZE=10,
FILEGROWTH=1)
执行以上代码之后,完成了创建学生信息管理数据库。
第二步启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
CREATETABLEStudent(
Snochar(7)PRIMARYKEY,
Snamechar(10)NOTNULL,
Ssexchar
(2)CHECK(Ssex='男'ORSsex='女'),
SagetinyintCHECK(Sage>=15ANDSage<=45),
Sdeptchar(20)DEFAULT'计算机系')
执行以上代码之后,完成了创建STUDENT表。
第三步启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
CREATETABLECourse(
Cnochar(10)NOTNULL,
Cnamechar(20)NOTNULL,
CcredittinyintCHECK(Ccredit>0),
SemestertinyintCHECK(Semester>0),
PeriodintCHECK(Period>0),
PRIMARYKEY(Cno))
执行以上代码之后,完成了创建COURSE表。
第四步启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
CREATETABLESC(
Snochar(7)NOTNULL,
Cnochar(10)NOTNULL,
Gradetinyint,
CHECK(Grade>=0andGrade<=100),
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno))
执行以上代码之后,完成了创建SC表。
在企业管理器中实现以上操作,实验过程中注意避免数据库和基本表的命名冲突的问题。
本部分试验内容可不写入实验报告。
第五步为基本表建立基于主码的聚簇索引。
启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
CREATECLUSTEREDINDEXSNO_CLU
ONSTUDENT(SNODESC)
CREATECLUSTEREDINDEXCNO_CLU
ONCOURSE(CNODESC)
CREATECLUSTEREDINDEXSNOCNO_CLU
ONSC(SNOCNO)
分别执行以上代码,基本表STUDENT、COURSE、SC中便被创建了聚簇索引数据库对象。
第六步为基本表STUDENT、COURSE、SC创建非聚簇索引。
启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
CREATEINDEXSAGE_INX
ONSTUDENT(SAGEDESC)
CREATEINDEXCNAME_INX
ONCOURSE(CNODESC)
CREATEINDEXGRADE_INX
ONSC(GRADE)
分别执行以上代码,基本表STUDENT、COURSE、SC中便被创建了索引数据库对象。
第七步为基本表STUDENT、COURSE、SC创建符合条件的数据库视图,题目自拟。
举例:
1)为数学系学生建立基本信息视图。
启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
CREATEVIEWMATH_VIEW
AS
SELECT*
FROMSTUDENT
WHERESDEPT=‘数学‘
2)为数学系中全体女同学建立基本信息视图。
启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
CREATEVIEWMATHNV_VIEW
AS
SELECT*
FROMMATH_VIEW
WHERESSEX=‘女
第八步在企业管理器中完成该实验内容,注意分析表之间的关系图与主码和外码概念的联系。
实验2DML语言的应用
实验目的:
本次实验,要求学生在学生信息管理数据库的学生基本信息表、课程基本信息表以及学生_课程表中根据要求进行数据的插入、删除和更新。
操作时,要考虑到表之间的级联关系。
实验内容:
1)向基本表STUDENT、COURSE、SC中插入适量备用数据。
2)删除基本表STUDENT、COURSE、SC中符合要求的数据。
3)更新基本表STUDENT、COURSE、SC中符合要求的记录。
4)多表之间的级联数据删除。
实验步骤:
第一步向基本表STUDENT中插入数据。
启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
INSERTINTOSTUDENT(SNO,SNAME,SAGE,SSEX,SDEPT)
VALUES(‘2004080201’,’王刚’,20,’男’,’计算机’)
执行该代码后,在STUDENT表中增加了一条记录。
其它数据的插入请参照上述操作。
注意:
在为基本表SC插入数据时必须遵照参照完整性规则。
第二步删除基本表STUDENT中满足条件的数据。
启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
DELETEFROMSTUDENT
WHERESDEPT=’数学’
执行该代码后,在STUDENT表中删除了一条记录。
其它数据的删除请参照上述操作。
第三步更新基本表STUDENT中满足条件的记录。
启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
UPDATESTUDENT
SETSAGE=SAGE+1
执行该代码后,在STUDENT表中的SAGE数据进行了加1的更新。
其它数据的更新请参照上述操作。
第四步级联删除示例
1)删除辛国年同学的成绩。
启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
DELETEFROMSC
WHERES#IN
(SELECTS#FROMS
WHERESN=‘辛国年’)
2)在STUDENT表中,假设已经增加了奖学金列BONUS(INT),凡总分超过500分学生的发奖金100元。
启动SQLServer2000QueryAnalyzer,输入如下代码:
USESTUDENT
GO
UPDATESTUDENTSETBONUS=100
UPDA
WHERES#IN
(SELECTS#
FROMSC
GROUPBYS#
HAVINGSUM(GRADE)>=500)
实验3数据库查询语言的应用
(一)
实验目的:
本次实验,要求学生在学生信息管理数据库的基本表中,适当利用集函数检索满足条件的数据,并根据要求输出检索结果。
(单表数据检索,实验时要求分别使用SQL语言和T-SQL语言实现自定的题目)
实验内容:
1)检索学生的姓名,年龄和性别
2)检索学生选修课程的课程号
3)检索学习课程号为C2的所有学生的学号和成绩
4)检索课程号为C2且成绩高于85分以上的学生学号和成绩
5)检索选修C1或C2的学生学号
6)检索成绩在70分至80分之间的学生学号,课程号和成绩
7)检索选修C1的学生学号和成绩,并按成绩的降序和学号的升序排列
8)检索学号为S1,S3,S4的姓名,年龄(年龄按升序排列)
实验步骤:
启动SQLServer2000QueryAnalyzer,输入如下代码:
(查询结果在此不做描述,操作的方式相似,不赘述)
USESTUDENT
GO
SELECTSN,AGE,SEXFROMS;
(SELECT*FROMS;)
SELECTDISTINCTC#
FROMSC
SELECTS#,GRADEFROMSC
WHEREC#=‘C2’;
S#,GRADEFROMSC
WHEREC#=‘C2’ANDGRADE>85;
SELECTS#FROMSC
WHEREC#=‘C1’ORC#=‘C2;
SELECT*FROMSC
WHEREGRADEBETWEEN70AND80;
SELECTS#,GRADEFROMSC
WHEREC#=‘C1’
ORDERBYGRADEDESC,S#;
SELECTSN,AGEFROMS
WHERES#IN(‘S1’,’S3’,’S4’)
ORDERBYAGE;
执行以上代码,运行的结果分别对应实验内容中的8个题目。
根据实验过程中的实际情况,同学们可以自行命题实现数据的检索。
实验4数据库查询语言的应用
(二)
实验目的:
本次实验,要求学生在学生信息管理数据库的多个基本表中,适当利用集函数检索满足条件的数据,并根据要求输出检索结果。
(多表数据检索,可以使用的多表连接关键词包括:
IN、ALL、ANY、EXISTS、INNERJOINON以及关系运算符等等,实验时要求分别使用SQL语言和T-SQL语言实现自定的题目)
实验内容:
1)检索辛国年同学所学课程的课程号及成绩
2)查询每一门课程的间接先修课的课号和课名。
(参照给定的数据表)
3)检索所有学生的姓名、选课名称和成绩。
4)检索和辛国年同学同岁的学生姓名。
5)检索选修C2课程号的学生姓名
6)检索选修课程C2的学生中成绩最高的学生的学号。
7)检索没有选修C2的学生姓名
8)检索选修C2课程号的学生姓名(用EXISTS)
9)检索没有选修C2的学生姓名(用NOTEXIST)
10)检索出选修课程至少等于三门的学生学号和选课门数
11)检索缺少学习成绩的学生学号和课程号
实验步骤:
启动SQLServer2000QueryAnalyzer,输入如下代码:
(查询结果在此不做描述,操作的方式相似,不赘述)
USESTUDENT
GO
SELECTSN,C#,GRADEFROMS,SC
WHERES.S#=SC.S#ANDSN=‘辛国年’;
SELECTFIRST.C#,SECOND.CP#
FROMCFIRST,CSECOND
WHEREFIRST.CP#=SECOND.C#
SELECTSN,CN,GRADEFROMS,SC,C
WHERES.S#=SC.S#ANDSC.C#=C.C#;
SELECTSNFROMS
WHEREAGE=
(SELECTAGEFROMS
WHERESN=‘辛国年’);
SELECTSNFROMS
WHERES#=ANY
(SELECTS#FROMSC
WHEREC#=‘C2’);
(SELECTSNFROMS,SC
WHERES.S#=SC.S#ANDC#=‘C2’);
WHEREC#=‘C2’ANDGRADE>=ALL
(SELECTGRADEFROMSC
WHEREC#=‘C2’);
WHERE‘C2’NOTIN
(SELECTC#FROMSC
WHERES#=S.S#);
SELECTSNFROMS
WHEREEXISTS
(SELECT*FROMSC
WHERES#=S.S#ANDC#=‘C2’);
SELECTSNFROMS
WHERENOTEXISTS
(SELECT*FROMSC
WHERES#=S.S#ANDC#=‘C2’);
SELECTS#,COUNT(*)FROMSC
GROUPBYS#
HAVINGCOUNT(*)>=3;
SELECTS#,C#FROMSC
WHEREGRADEISNULL;
执行以上代码,运行的结果分别对应实验内容中的8个题目。
根据实验过程中的实际情况,同学们可以自行命题实现数据的检索。
实验5DCL语言的应用、备份和恢复
实验目的:
本次实验,要求学生对学生信息管理数据库、学生基本信息表、课程基本信息表以及学生_课程表根据要求进行插入、删除、更新、检索等权限的授予和收回。
并根据所得到的权限进行相应的操作;要求学生对数据库和基本表进行数据的备份和恢复。
实验内容:
1、权限的授予与收回
(1)授予(收回)SCOTT用户创建基本表的权限
(2)把STUDENT表上的插入和修改Sno列的特权授予LI和WANG用户
(3)把Course表上的所有权力授予用户WANG,而WANG还可以把权限授予其它用户
(4)从WANG用户手中收回修改SCOTT表的权限
2、数据库的备份与恢复
本实验的实验方法参照相关SQLServer书籍中数据备份和恢复机制的内容和步骤进行,本指导书将省略操作步骤。
1)用EnterpriseManager创建一个备份设备,自命名。
2)为学生信息管理数据库设置一个备份计划,要求每星期一进行备份。
3)在EnterpriseManager中恢复学生选课数据库。
本部分实验过程可以不写入实验报告,但要求将实验内容和结果写在实验报告中。
2、利用查询分析器
启动SQLServer2000QueryAnalyzer,输入如下代码:
(查询结果在此不做描述,操作的方式相似,不赘述)
/*授予(收回)SCOTT用户创建基本表的权限*/
GRANTCREATETABLETOSCOTT;
REVOKECREATETABLEFROMSCOTT;
/*把STUDENT表上的插入和修改Sno列的特权授予LI和WANG用户*/
GRANTINSERT,UPDATE(Sno)ONStudentTOLI,WANG;
/*把Course表上的所有权力授予用户WANG,而WANG还可以把权限授予其它用户*/
GRANTALLONCourseTOWANGWITHGRNATOPTION
/*从WANG用户手中收回修改SCOTT表的权限*/
REVOKEUPDATEONStudentFROMWANG
分别在查询分析器中执行上述语句,查看执行结果。
实验6存储过程与触发器的应用
实验目的:
本次实验,要求学生在学生基本信息表中创建插入数据触发器、在课程基本信息表中创建删除数据和更新数据触发器。
在该数据库中创建检索满足条件的数据的存储过程。
学生可以根据实际情况,自行设计实验题目。
实验内容:
1)基于PUBS数据库建立AU_INFO存储过程,该存储过程利用表间连接的方式返回指定的作者的姓名、该作者所写的书籍的出版商。
2)基于student数据库创建触发器。
在Student表中存储了学号和姓名信息。
在COURSE表中存储了课程的编号、学号和成绩等信息。
在删除STUDENT表中某些学生的信息时,应该同时删除COURSE表中相关的数据行。
实验步骤:
第一步
启动SQLServer2000QueryAnalyzer,输入如下代码:
/*基于PUBS数据库建立AU_INFO存储过程,该存储过程利用表间连接的方式返回指定的作者的姓名、该作者所写的书籍的出版商。
*/
usepubs
ifexists(selectnamefromsysobjects
wherename='au_info'andtype='P')
dropprocau_info
go
usepubs
go
createprocau_info
@lnvarchar(40),
@fnvarchar(20)
as
selectau_lname,au_fname,title,pub_name
fromauthorsainnerjointitleauthorta
ona.au_id=ta.au_idinnerjointitlest
ont.title_id=ta.title_idinnerjoinpublishersp
ont.pub_id=p.pub_id
whereau_fname=@fn
andau_lname=@ln
go
第二步启动SQLServer2000QueryAnalyzer,输入如下代码:
/*基于student数据库创建触发器。
在Student表中存储了学号和姓名信息。
在COURSE表中存储了课程的编号、学号和成绩等信息。
在删除STUDENT表中某些学生的信息时,应该同时删除COURSE表中相关的数据行。
*/
createtriggerdelete_student_message
onstudent
fordelete
as
declare@snovarchar(20)
select@sno=s.sno
fromstudents,deletedd
wheres.sno=d.sno
ifexists(select*fromscwheresno=@sno)
deletefromsc
wheresno=@sno
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 实验 指导书