数据结构实验报告37353.docx
- 文档编号:24057568
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:22
- 大小:244.72KB
数据结构实验报告37353.docx
《数据结构实验报告37353.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告37353.docx(22页珍藏版)》请在冰豆网上搜索。
数据结构实验报告37353
(此文档为word格式,下载后您可任意编辑修改!
)
合肥师范学院
实验报告册
20132014学年第2学期
系别
计算机科学与技术系
实验课程
数据库原理
专业
计算机软件
班级
一班
姓名
张静
学号
指导教师
潘洁珠
实验名称
课时
实验报告成绩
实验
(一)——数据库基本操作
2
实验
(二)——SQL语句
6
实验(三)——数据库完整性与安全性实验
4
实验(四)——数据库编程
4
备注:
实验一——数据库基本操作
一、实验目的
1.熟悉MSSQLSERVER运行界面,掌握服务器的基本操作。
2.掌握界面操作方法完成用户数据库建立、备份和还原。
3.建立两个实验用的数据库,使用企业管理器和查询分析器对数据库和表进行基本操作。
二、实验预习内容
在认真阅读教材及实验指导书的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。
1.熟悉SQLSERVER2000的运行环境,练习服务器基本操作:
打开、停止、关闭。
2.使用SQLSERVER2000中的企业管理器完成以下任务。
数据库名称:
STC
表:
STU(snochar(9),snamevarchar(50),ssexchar
(2),sageint,sdeptchar
(2));
COUTSES(cnochar(3),cnamevarchar(50),cpnochar(3),creditint);
SC(snochar(9),cnochar(3),gradeint);
说明:
以上为表结构,以snochar(9)为例,说明sno属性设置为字符类型,宽度为9,int指整型数据。
1)建立数据库STC,分别建立以上三张表,并完成数据录入。
(表结构及数据参见教材)
COUTSES表:
STU表
SC表
2)分析并建立各表的主码,用下划线在上面表结构中标出主码。
COURSE表
SC表
STUDENT表
3)建立各表之间的关联,请简述操作步骤。
建立关联:
右击SC表,设计表---在任意一个空白处右击---关系---表和列规范---选择主键表course对应的主码cno和外键表sc对应的cno以及主键表stu对应的主码sno和外键表sc对应的sno—确定即可。
4)参考实验指导书的【第5章数据库的备份和还原】,使用企业管理器对数据库STC进行备份,并尝试在个人电脑与机房电脑上进行还原,请简述备份、还原操作的步骤。
右击STC数据库----任务—备份—备份到(添加到你要备份到的地方)---确定。
右击STC数据库----任务—还原----数据库---(从原数据库或源设备)----选择路径--确定。
3.在SQLSERVER2000的查询分析器中使用SQL语言完成以下任务。
参考实验指导书《数据库系统实验指导教程》【实验1.1数据定义】,建立数据库SCHOOL,分别建立students、teachers、courses、choices四张表,表结构见实验指导书P236【附录A】。
1)用SQL语言创建数据库、建表。
建表时为各表建立关键字、设置外码,数据暂不录入,请写出对应的SQL命令。
创建数据库:
CreatedatabaseSCHOOL
建students表:
createtablestudents
(
sidchar(10)primarykey,
snamechar(30)notnull,
emailchar(30),
gradeint,
)
建teachers表:
createtableteachers
(
tidchar(10)primarykey,
tnamechar(30)notnull,
emailchar(30),
salaryint,
)
建courses表:
createtablecourses
(
cidchar(10)primarykey,
cnamechar(30)notnull,
key(sid)referencesstudents(sid),
foreignkey(tid)referencesteachers(tid),
foreignkey(cid)referencescourses(cid),)
5)为students表、courses建立按主键増序排列的索引,请写出相应的SQL命令。
Students表索引:
createindexs
onstudents(sidasc)
courses表索引:
createindexc
oncourses(cidasc)
3.删除course上的索引,请写出相应的SQL命令。
dropindexc
oncourses
4.在SCHOOL数据库中的students表中增加一个“出生日期”字段,类型为日期时间型,请写出对应的SQL命令。
altertablestudents
add出生日期datetime
5.删除students中的“出生日期”字段,请写出对应的SQL命令。
altertablestudents
dropcolumn出生日期
6.删除SCHOOL数据库中的students表,请写出对应的SQL命令。
altertablechoicesdropconstraintFK__choices__sid__0EA330E9
droptablestudents
7.使用企业管理器创建数据库SCHOOL,实现内容与实验预习内容3完全相同。
8.使用企业管理器,将SCHOOL数据库分离出MSSQLSERVER,请简述步骤。
点开数据库---找到school数据库----(右击)所有任务----分离数据库----确定。
9.使用企业管理器,使用【数据库所有任务附加数据库】将SCHOOL数据库添加进SQLSERVER,并查看数据。
10.使用查询分析器,删除数据库STC,请写出对应的SQL命令。
dropdatabasestc
11.结束本次实验
三、实验课后训练
1.使用企业管理器练习数据的导入导出。
1)将SCHOOL数据库students表中的数据导出到STC数据库对应的stu表中;
2)向STC数据库courses表导入SCHOOL数据库courses表中的数据;
3)自行练习实验指导书【实验5.3SQLSERVER数据库的导入与导出】部分;
2.自行练习实验指导书【实验1.1数据定义】部分。
四、
实验报告
1.简述本次实验所用到的SQL命令及其功能。
命令:
creatdatabase<数据库名>功能:
建立数据库
命令:
Creattable<表名>(<列名><数据类型>[列级完整性约束条件])
[,<表级完整性约束条件>]
功能:
定义基本表
命令:
altertable<表名>
[add<新列名><数据类型>[完整性约束]]-----增加新列和新的完整性约束条件
[Drop<完整性约束名>]----删除指定的完整性约束条件
[altercolumn<列名><数据类型>];---修改原有的列定义,包括列名和数据类型。
功能:
修改基本表
2.在MSSQLSERVER中数据库的“分离|添加”与“备份|还原”是相同的功能吗?
在MSSQLSERVER中数据库的“分离|添加”与“备份|还原”的功能是不相同的。
分离之后的数据库在用户不更改路径的情况下会分离在系统默认的路径上,且分离之后在数据库的下属栏中找不到分离的数据库,除非重新按指定路径添加。
而备份的数据库还会显示在数据库的下属栏中。
3.实验总结(实验过程中出现的问题、解决方法、结果如何或其它)
因为大部分作业都是在自己电脑上操作的,而我的电脑上装的的是SQL2005,所以有少部分老师上课讲的东西,在我的电脑中找不到,如:
不知道如何建立关联。
经过询问同学,才知道建立关联之前应先设主码,且在设计表中设置关联。
在没有看书的情况下,不知道如何建立表,经查书之后知道应先写属性名,再写数据类型,最后写约束条件。
创建索引,应该是creatindex<索引名>on<表名>[次序]。
删除索引页一样dropindex<索引名>。
修改表:
altertable<表名>如果增加列就是add列名数据类型,若删除列,则同样在上述基础上,dropcolumn列名。
若删除基本表则需要先修改约束关系再用drop语句删除表如:
altertablechoicesdropconstraintFK__choices__sid__0EA330E9
droptablestudents(约束关系可用SP_HELP表名!
!
!
是下划线)。
虽然实验完成需要的时间很多,但总体收获还是很大的。
实验二——SQL语句
一、实验目的
1.熟悉SQL的数据查询语言,能使用SQL进行单表查询、连接查询、嵌套查询、集合查询和统计查询,能理解空值的处理;
2.熟悉数据库的数据更新操作,能使用SQL语句对数据库进行数据的插入、更新、删除操作;
3.熟悉SQL支持的有关视图的操作,能创建、查询及取消视图;
4.了解NULL在数据库中的特殊含义,掌握使用SQL进行与空值相关的操作;
二、实验预习内容
在认真阅读教材及实验指导书【实验1.2数据查询】、【实验1.3数据更新】、【实验1.4视图】和【实验1.6空值和空集的处理】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。
1.使用SCHOOL数据库,在SQLSERVER2000的查询分析器中使用SQL语言完成以下操作。
请在空白处填写相应的SQL命令。
1)查询年级为2001的所有学生的名称,按编号顺序排列;
selectsname
fromSTUDENTS
wheregrade='2001'
orderbysid
2)查询所有课程名称中含有data的课程编号;
SELECTCID
FROMCOURSES
WHERECNAMELIKE'%DATA%'
3)统计所有老师的平均工资;
SELECTAVG(SALARY)
FROMTEACHERS
4)查询至少选了3门课的学生编号;
SELECTSID
FROMCHOICES
GROUPBYSIDHAVINGCOUNT(*)>=3
5)查询学号为的学生的姓名、所选课名及成绩;
SELECTstudents.SNAME,COURSES.CNAME,CHOICES.SCORE
FROMCHOICES,COURSES,STUDENTS
WHERESTUDENTS.SID=andCHOICES.sid=students.sidandchoices.cid=courses.cid
6)查询没有学生选的课程编号;
selectcid
fromcourses
wherecidnotin(
selectcid
fromchoices)
7)查询既选了C++又选了Java课程的学生编号;
Selectdistinctsid
fromchoices
wherecid=
(selectcid
fromcourses
wherecname='c++')andsidin
(selectsidfromchoices
wherecidin
(selectcidfromcourses
wherecname='java'))
8)查询选了C++但没选Java课程的学生编号;
Selectsid
fromchoices
wherecid=
(selectcid
fromcourses
wherecname='c++')andsidnotin
(selectsidfromchoices
wherecidin
(selectcidfromcourses
wherecname='java'))
9)向STUDENTS表中插入“LiMing”的个人信息(编号:
,名字:
LiMing,Email:
,年级:
1992);
insert
intostudents
values('','LiMing','','1992')
10)将“LiMing”的年级改为2002;
updatestudents
setgrade='2002'
wheresname='LiMing'
11)删除所有选了Java课程的学生选课记录;
delete
fromchoices
wherecid=
(selectcid
fromcourses
wherecname='java')
12)求出每门课的课程号、选课人数,结果存入数据库表T1中。
CREATETABLET1(
CIDCHAR(10)PRIMARYKEY,
RSINT)
INSERTINTOT1
SELECTCID,COUNT(DISTINCTSID)
FROMCHOICES
GROUPBYCID
13)查询所有选课记录的成绩并换算为五分制(注意NULL的情况);
selectdistinctscore,score20
fromchoices
14)查询成绩小于0的选课记录,统计总数、平均分、最大值和最小值(注意查询结果中NULL的情况);
selectsid,cid
fromchoices
wherescore<0
selectdistinctcount(*),avg(score),max(score),min(score)
fromchoices
15)按成绩顺序排序显示CHOICES表中所有记录。
(使用ORDERBY排序,注意NULL的情况);
selectdistinct*
fromchoices
orderbyscoreasc
16)创建视图V1,显示学生姓名、所选课名称、任课教师名;
createviewv1(sname,cname,tname)
as
selectstudents.sname,ame,teachers.tname
fromteachers,choices,students,courses
wherechoices.cid=courses.cidandchoices.sid=students.sidandchoices.tid=teachers.tid;
17)取消V1视图;
dropviewv1
2.使用STC数据库,在SQLSERVER2000的查询分析器中使用SQL语言完成以下操作。
请在空白处填写相应的SQL命令或其它内容。
1)创建视图V2,显示计算机(CS)系学生信息;(结合下面的b)小题,V2视图创建2次,分别使用不使用WITHCHECKOPTION选项)
(1)不加WITHCHECKOPTION
(2)加WITHCHECKOPTION
createviewv2
as
select*
fromstudent
wheresdept='cs'
createviewv2
as
select*
fromstudent
wheresdept='cs'
withcheckoption
2)插入元组(99999,张三,20岁,男,PH)到V2中,运行结果如何?
(观察WITHCHECKOPTION对结果的影响);
(1)不加WITHCHECKOPTION的结果
(2)加WITHCHECKOPTION的结果
insert
intoV2(sno,sname,ssex,sage,sdept)
values('9999','张三','男',20,'PH')
insert
intoV2(sno,sname,ssex,sage,sdept)
values('9999','张三','男',20,'PH')
3)在V2基础上,查询所有计算机系女生信息;
SELECT*
FROMV2
WHERESSEX='女'
3.结束本次实验
三、实验课后训练
1.掌握SQLSERVER中流控制语句及其它常用编程语句;
1)使用查询分析器,编写代码,输出乘法口诀表。
2.自行练习实验指导书P24【实验1.2数据查询】1.2.5自我实践部分;
3.自行练习实验指导书P30【实验1.3数据更新】1.3.5自我实践部分;
4.自行练习实验指导书P36【实验1.4视图】1.4.5自我实践部分;
5.自行练习实验指导书P49【实验1.6空值和空集的处理】1.6.5自我实践部分;
四、
实验报告
1.SQLSERVER中变量声明的命令是什么?
输出命令是什么?
2.SQLSERVER中实现分支和循环的语句分别是什么?
3.在SQLSERVER里使用ORDERBY排序时,NULL值如何处理?
使用GROUPBY分组时,NULL值又如何处理的?
在使用ORDERBY进行排序时,有ASC(升序)和DESC(降序)两种方式。
无论采用哪种方式,NULL值总被当作最小值处理。
即在按升序排列时,取空值的元组将最先显示,按降序排时,取空值的元组将会最后显示。
使用GROUPBY进行排序,取空值的项不是被忽略,而是将NULL看成一个取值,在处理的时候把所有取空值的项都看成一样,因而形成一个分组。
4.实验总结(实验过程中出现的问题、解决方法、结果如何或其它)
出现的问题:
1.有好多次运行都是有检查完成但是执行错误,经检查才知道是上面的数据库默认是master,而不是要执行的数据库。
2.由于粗心导致的字母拼写错误,导致执行结果出错。
3.不会使用嵌套语句,经过分析书上的程序段,略微懂了一点。
4.向表中插入记录,应该用insertinto表名values(列属性)。
5.更改属性用update表名set(属性=要更改的值)。
6.本来12题不会i,经过查看实验指导书,知道要把一系列属性值重新插入到新表中需要两步,一是先创建表,再插入记录。
7.创建视图用createview(视图名)asfrom表名。
8.知道了withcheckoption可以自动筛选不符合条件的记录。
实验三——数据库完整性与安全性
一、实验目的
1.理解实体完整性、参照完整性、用户自定义完整性的概念,学习三类完整性的实现,了解违反完整性的结果;
2.掌握MSSQLSERVER中的有关用户登录认证及管理方法,熟练使用自主存取控制进行权限管理;
二、实验预习内容
在认真阅读教材及实验指导书【2.1实体完整性】、【2.2参照完整性】、【2.3用户自定义完整性】、【2.4触发器】、【2.5综合案例】和【3.1用户标识与鉴别】、【3.2自主存取控制】、【3.3视图机制在自主存取控制上的应用】、【3.4Public角色在安全性中的应用】、【3.8综合案例】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。
1.使用SCHOOL数据库
1)创建一张新表CLASS,包括Class_id(varchar(4)),Name(varchar(10)),Department(varchar(20))三个属性列,其中Class_id为主码;
2)执行两次相同的插入操作(’0001’,’01csc’,’cs’),结果如何;
INSERT
INTOCLASS
VALUES('0001','01CSC','CS')
违反了PRIMARYKEY约束'PK_class'。
不能在对象'class'中插入重复键。
语句已终止。
2.使用SQL命令创建一张学生互助表,要求:
包括学生编号、学生姓名、学生帮助对象的编号,每个学生有且仅有一个帮助对象,帮助的对象必须是已存在的学生。
createtable学生互助表
(sidvarchar(10)primarykey,
snamevarchar(30),
s_idvarchar(10)unique,
foreignkey(s_id)references学生互助表(sid)
);
3.使用STC数据库,修改设置,完成以下2种不同的要求,请写出对应的语句或简述操作过程:
1)当更新、删除STU表中记录时,若SC表中有此学生的记录,则拒绝;
2)当更新、删除STU表中记录时,若SC表中有此学生的记录,则自动更新或删除;
4.使用SQL命令完成以下任务:
1)创建Worker表(表结构见指导书P73)
2)定义约束U1、U2,其中U1规定Name字段取值唯一,U2规定sage字段上限是28;
3)插入一条合法记录;
4)插入一条违反U2约束的记录,简述观察到的结果如何?
并分析原因;
5)去除U1约束;
6)修改约束U2,令sage的值大于等于0;
7)创建规则rule_sex,规定更新或插入的值只能是M或F,并绑定到Worker的sex字段;
8)插入2条记录,一条满足规则rule_sex,一条违反规则,观察结果。
5.使用查询分析器创建触发器并测试,请写出相应的语句:
1)为Worker表创建触发器T1,当插入或更新表中数据时,保证所操作记录的sage大于0;
2)为Worker表创建触发器T2,禁止删除编号为00001的记录;
3)为Worker表创建触发器T3,要求更新一个记录时,表中记录的sage要比老记录的sage的值大。
6.分别用企业管理器和查询分析器实现用户的标识并测试,请写出相应的操作过程或对应的语句:
1)设置SQLSERVER的安全认证模式;
2)建立名为“LiYong”的登录用户、数据库用户,默认访问SCHOOL数据库,密码为“abcd”;
3)取消“LiYong”用户;
7.先以sa帐号登录,要实现如下表的权限管理,请按先后顺序写出相应的SQL语句(假设所有用户尚未定义,其密码均为123),并加以必要的说明。
编号
授权用户名
被授权用户名
数据库对象名
允许的操作类型
能否转授权
1
SA
U1
Students
SELECT
不能
2
SA
U2
Students
ALL
不能
3
SA
PUBLIC
Choices
SELECT
不能
4
SA
U3
Students
SELECT
能
5
U3
U4
Students
SELECT
能
6
U4
U5
Students
SELECT
不能
7
SA
U6
Choi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 37353