《数据结构学习实验报告.doc》由会员分享,可在线阅读,更多相关《数据结构学习实验报告.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、合肥师范学院 实验报告册 2013 / 2014 学年 第2 学期系 别 计算机科学与技术系实验课程 数据库原理专 业 计算机软件班 级 软件一班姓 名 罗晓薇学 号 1211431015指导教师 潘洁珠实验名称课时实验报告成绩实验(一)数据库基本操作2实验(二)SQL语句6实验(三)数据库完整性与安全性实验4实验(四)数据库编程4备注:实验一 数据库基本操作一、 实验目的1. 熟悉MS SQL SERVER运行界面,掌握服务器的基本操作。2. 掌握界面操作方法完成用户数据库建立、备份和还原。3. 建立两个实验用的数据库,使用企业管理器和查询分析器对数据库和表进行基本操作。二、 实验预习内容在
2、认真阅读教材及实验指导书的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。1. 熟悉SQL SERVER 2000 的运行环境,练习服务器基本操作:打开、停止、关闭。2. 使用SQL SERVER 2000 中的企业管理器完成以下任务。数据库名称:STC表:STU(sno char(9), sname varchar(50), ssex char(2) , sage int, sdept char(2) ); COUTSES( cno char(3), cname varchar(50), cpno char(3), credit int ); SC(sno char(9), c
3、no char(3), grade int );说明:以上为表结构,以sno char(9)为例,说明sno属性设置为字符类型,宽度为9,int指整型数据。 1) 建立数据库STC,分别建立以上三张表,并完成数据录入。(表结构及数据参见教材)2) 分析并建立各表的主码,用下划线在上面表结构中标出主码。3) 建立各表之间的关联,请简述操作步骤。 答:1)2) 3) 4) 参考实验指导书的【第5章 数据库的备份和还原】,使用企业管理器对数据库STC进行备份,并尝试在个人电脑与机房电脑上进行还原,请简述备份、还原操作的步骤。答:备份:右击STC数据库出现菜单,点击任务,选择还原操作,出现对话框后,输
4、入备份名称backstc,在目标中选择添加,选择备份数据库所在位置,再点击确定即可备份。还原:右击数据库,在所有任务中选择还原数据库,再新的对话框内输入所要还原数据库的名称,再选择从设备还原,按添加键,选择备份所在磁盘,选中备份,点击确定还原数据库。3. 在SQL SERVER 2000 的查询分析器中使用SQL语言完成以下任务。参考实验指导书数据库系统实验指导教程【实验1.1 数据定义】,建立数据库SCHOOL,分别建立students、teachers、courses、choices四张表,表结构见实验指导书P236 【附录A】。1) 用SQL语言创建数据库、建表。建表时为各表建立关键字、
5、设置外码,数据暂不录入,请写出对应的SQL命令。创建数据库Create database stc;Create table students (sid char(10) unique primary key,Sname char(30) not null,Email char(30),Grade int,);创建教师表Create table teachers(tid char(10) unique primary key,Tname char(30) not null,Email char(30),Salary int,);创建课程表Create table courses(cid char
6、(10) unique primary key,Cname char(30) not null,Hour int,);创建选课表Create table choices(no char(10) unique primary key,Sid char(10) not null,Tid char(10),Cid char(10),Score int,Foreign key (sid) references students(sid),Foreign key (tid) references teachers(tid),Foreign key (cid) references courses(cid
7、),);2) 为students表、courses建立按主键増序排列的索引,请写出相应的SQL命令。Create index stusno on students (sno asc);Create index coucno on courses (cno asc);3) 删除course上的索引,请写出相应的SQL命令。 Drop index coucno;4) 在SCHOOL数据库中的students表中增加一个“出生日期”字段,类型为日期时间型,请写出对应的SQL命令。Alter table students add 出生日期 date;5) 删除students中的“出生日期”字段,请写
8、出对应的SQL命令。Alter table students drop column 出生日期;6) 删除SCHOOL数据库中的students表,请写出对应的SQL命令。Drop table students cascade;4. 使用企业管理器创建数据库SCHOOL,实现内容与实验预习内容3完全相同。5. 使用企业管理器,将SCHOOL数据库分离出MS SQL SERVER,请简述步骤。答:选中需要分离的数据库右击,所有任务菜单里有选项分离数据库,直接选择确定.6. 使用企业管理器,使用【数据库/所有任务/附加数据库】将SCHOOL数据库添加进SQL SERVER,并查看数据。 图 7.
9、使用查询分析器,删除数据库STC,请写出对应的SQL命令。Delete database stc;8. 结束本次实验三、 实验课后训练1. 使用企业管理器练习数据的导入导出。1) 将SCHOOL数据库students表中的数据导出到STC数据库对应的stu表中;2) 向STC数据库courses表导入SCHOOL数据库courses表中的数据;3) 自行练习实验指导书【实验5.3 SQL SERVER数据库的导入与导出】部分;2. 自行练习实验指导书【实验1.1数据定义】部分。答:1.1) 2) 实验报告1. 简述本次实验所用到的SQL命令及其功能。 答:1.创建数据库create datab
10、ase 2.创建基本表 create table ( 列级完整性约束) 3.建立表的索引create index on ( 次序) 4.修改基本表alter table add 完整性约束 5.删除索引drop index 6.删除表中某一属性alter table drop column 7.删除表drop table 8.删除数据库delete database 2. 在MS SQL SERVER中数据库的“分离|添加”与“备份|还原”是相同的功能吗? 答:数据库的备份是数据库结构,对象和数据的副本,使得数据库系统发生事故时能还原和恢复数据库中的数据。实现快速的移动数据库。将数据库的附加的
11、逆过程,就是把完整地数据库文件和日志文件从服务器上分离下来,分离后的数据库文件在拷贝和移动后可以附加在其他的计算机上,附加是分离的逆过程。 3. 实验总结(实验过程中出现的问题、解决方法、结果如何或其它) 答:问题:在附加数据库时数据不是sql server能用的数据头,没有认清字符型的概念,即字符出生日期应输入出生日期。删除数据库时应用delete语句,而不是drop语句,当导入数据时,要注意两个对话框的用处不同。 解决方法:两个对话框一个是需导入的数据库,另一个是从哪儿导入数据库,和是否是在需导入的数据库还是在要导出的数据库库中操作无关。实验二SQL语句一、 实验目的1. 熟悉SQL的数据
12、查询语言,能使用SQL进行单表查询、连接查询、嵌套查询、集合查询和统计查询,能理解空值的处理;2. 熟悉数据库的数据更新操作,能使用SQL语句对数据库进行数据的插入、更新、删除操作;3. 熟悉SQL支持的有关视图的操作,能创建、查询及取消视图;4. 了解NULL在数据库中的特殊含义,掌握使用SQL进行与空值相关的操作;二、 实验预习内容在认真阅读教材及实验指导书【实验1.2 数据查询】、【实验1.3 数据更新】、【实验1.4 视图】和【实验1.6 空值和空集的处理】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。1. 使用SCHOOL数据库,在SQL SERVER 2000 的
13、查询分析器中使用SQL语言完成以下操作。请在空白处填写相应的SQL命令。1) 查询年级为2001的所有学生的名称,按编号升序排列; select sname from students where grade=2001 order by sid asc2) 查询所有课程名称中含有data的课程编号; select cid from courses where cname like %data%3) 统计所有老师的平均工资; select avg(salary) from teachers4) 查询至少选了3门课的学生编号; select sid from choices group by si
14、d having count(*)=3;5) 查询学号为80009026的学生的姓名、所选课名及成绩; select choices.sname,cname,score from students,choices,courses where choices.cid=courses.cid and choices.sid=students.sid and sid=800090266) 查询没有学生选的课程编号; select courses.cid from choices,courses where choices.cid=courses.cid and sid is null;7) 查询既选
15、了C+又选了Java课程的学生编号; select sid from choices,courses where courses.cid=choices.cid and ame=c+ and sid in (select sid from choices,courses where courses.cid=choices.cid and cname=java)8) 查询选了C+但没选Java课程的学生编号; select sid from choices,courses where courses.cid=choices.cid and cname=c+ and sid not in (sel
16、ect sid from choices,courses where choices.cid=courses.cid and cname=java) 9) 向STUDENTS表中插入“LiMing”的个人信息(编号:700045678,名字:LiMing,Email:LX,年级:1992); select sid from choices,courses where courses.cid=choices.cid and cname=c+ and sid not in (select sid from choices,courses where choices.cid=courses.cid
17、and cname=java) 10) 将“LiMing”的年级改为2002; update students set grade=2002 where sname=liming11) 删除所有选了Java课程的学生选课记录; delete from choices where java=(select cname from courses where courses.cid=choices.cid)12) 求出每门课的课程号、选课人数,结果存入数据库表T1中。 create table t1 (cid char(10) primary key,rs int) insert into t1 s
18、elect cid,count(sid) from choices group by cidi. 查询所有选课记录的成绩并换算为五分制(注意NULL的情况); select score,score/20 from choices 13) 查询成绩小于0的选课记录,统计总数、平均分、最大值和最小值(注意查询结果中NULL的情况); select count(*),avg(score),max(score),min(score) from choices where score0 14) 按成绩顺序排序显示CHOICES表中所有记录。(使用ORDER BY排序,注意NULL的情况); select
19、 * from choices order by score asc15) 创建视图V1,显示学生姓名、所选课名称、任课教师名; create view v1 (sname,cname,tname) as select students.sname,ame,teachers.tname from choices,students,teachers,courses where choices.tid=teachers.tid and choices.cid=courses.cid and choices.sid=students.sid16) 取消V1视图; drop view v12. 使用S
20、TC数据库,在SQL SERVER 2000 的查询分析器中使用SQL语言完成以下操作。请在空白处填写相应的SQL命令或其它内容。1) 创建视图V2,显示计算机(CS)系学生信息;(结合下面的b)小题,V2视图创建2次,分别使用/不使用WITH CHECK OPTION选项)(1)不加WITH CHECK OPTION(2)加WITH CHECK OPTIONCreate view v2(sno,sname,ssex,sage,sdept) as select * from stu where sdept=csCreate view v2(sno,sname,ssex,sage,sdept)
21、as select * from stu where sdept=csWith check option2) 插入元组(99999,张三,20岁,男,PH)到V2中,运行结果如何?(观察WITH CHECK OPTION对结果的影响);(1)不加WITH CHECK OPTION的结果(2)加WITH CHECK OPTION的结果Insert into v2 values(99999,张三,男,20,ph)Insert into v2 values(99999,张三,男,20,ph)with check option违反了PRIMARY KEY 约束 PK_STU_76CBA758。3) 在
22、V2基础上,查询所有计算机系女生信息; select * from view v2 where ssex= 女3. 结束本次实验三、 实验课后训练1. 掌握SQL SERVER中流控制语句及其它常用编程语句;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.Select *
23、from courses2. select sid from choices3. Select cid from courses where hour88 实验报告1SQL SERVER中变量声明的命令是什么?输出命令是什么? 答:变量声明的命令:declare 变量名 类型,局部变量的声明命令为declare ;而全局变量的声明命令,必须以标记符开头。输出命令:print局部变量或字符串;select 局部变量as 自定义列名 2.SQL SERVER中实现分支和循环的语句分别是什么? 答:实现分支语句: if-else语句和case-end语句;if-else语句属于分支结构,它与C编程语
24、句的if语句类似,也是根据条件是否成立来确定程序的执行方向。语法:If(条件) 语句或语句块Elsecase-end语句计算一组条件表达式,并返回其中一个符合条件的结果。语法:Case When条件1 then结果1 When条件2 then结果2 else 其他结果EndCase语句表达结果“条件1”成立,则执行“结果1”,其余类推。如果when的条件都不匹配,则执行else后面的结果。Else可以省略。如果省略else并且when的条件表达式的结果都不为TRUE,则case-end语句返回null实现循环的语句:while循环语句:while循环语句可以根据某些条件重复执行一条SQL语句或
25、一个语句块。通过使用while关键字,可以确保只要制定的条件为TRUE,就会重复执行语句,直至指定条件为FALSE为止:语法:While(条件) Begin 语句或语句块 break| continue End3.在SQL SERVER里使用ORDER BY排序时,NULL值如何处理?使用GROUP BY分组时,NULL值又如何处理的? 答:使用ORDER BY排序,此时null值往前排,null被看做最小值处理。 使用GROUP BY排序,此时取null的看做一组,是同一个值。4.实验总结(实验过程中出现的问题、解决方法、结果如何或其它) 问题:1.进行联接操作时,连接条件,及各表同属性分不
26、大清。 2.对多个条件,多张表的查询,联接时连接条件的先后顺序总是弄错。 3.对两个条件选其一的情况,不是很能掌握。 4.当查询具有某一特征的复杂的元组的信息时只会最基础的按条件来,不灵活。 解决办法:先将要查的信息及其有关的表列出来,再考虑他们之间的关系,先做什么后做什么理清楚,两个情况选一种满足可以用in或其他形式表示,与运算用union,分类可以用group by或者having语句来表示条件。 结果:很有效,不过在通常在查询中需要做联接运算的列名没有加表名前缀,导致查询没有意义。实验三数据库完整性与安全性一、 实验目的1. 理解实体完整性、参照完整性、用户自定义完整性的概念,学习三类完
27、整性的实现,了解违反完整性的结果;2. 掌握MS SQL SERVER中的有关用户登录认证及管理方法,熟练使用自主存取控制进行权限管理;二、 实验预习内容在认真阅读教材及实验指导书【2.1 实体完整性】、【2.2 参照完整性】、【2.3 用户自定义完整性】、【2.4 触发器】、【2.5 综合案例】和【3.1 用户标识与鉴别】、【3.2 自主存取控制】、【3.3 视图机制在自主存取控制上的应用】、【3.4 Public角色在安全性中的应用】、【3.8 综合案例】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。1. 使用SCHOOL数据库1) 创建一张新表CLASS,包括Class
28、_id(varchar(4),Name(varchar(10),Department(varchar(20)三个属性列,其中Class_id为主码; 2) 执行两次相同的插入操作(0001,01csc,cs),结果如何;2. 使用SQL命令创建一张学生互助表,要求:包括学生编号、学生姓名、学生帮助对象的编号,每个学生有且仅有一个帮助对象,帮助的对象必须是已存在的学生。3. 使用STC数据库,修改设置,完成以下2种不同的要求,请写出对应的语句或简述操作过程:1) 当更新、删除STU表中记录时,若SC表中有此学生的记录,则拒绝;2) 当更新、删除STU表中记录时,若SC表中有此学生的记录,则自动更
29、新或删除;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表创建触发
30、器T1,当插入或更新表中数据时,保证所操作记录的sage大于0;2) 为Worker表创建触发器T2,禁止删除编号为00001的记录;3) 为Worker表创建触发器T3,要求更新一个记录时,表中记录的sage要比老记录的sage的值大。6. 分别用企业管理器和查询分析器实现用户的标识并测试,请写出相应的操作过程或对应的语句:1) 设置SQL SERVER的安全认证模式;2) 建立名为“LiYong”的登录用户、数据库用户,默认访问SCHOOL数据库,密码为“abcd”;3) 取消“LiYong”用户;7. 先以sa帐号登录,要实现如下表的权限管理,请按先后顺序写出相应的SQL语句(假设所有用
31、户尚未定义,其密码均为123),并加以必要的说明。编号授权用户名被授权用户名数据库对象名允许的操作类型能否转授权1SAU1StudentsSELECT不能2SAU2StudentsALL不能3SAPUBLICChoicesSELECT不能4SAU3StudentsSELECT能5U3U4StudentsSELECT能6U4U5StudentsSELECT不能7SAU6ChoicesINSERT能8SAU7Students.snameUPDATE不能8. 创建在SCHOOL数据库中choices上的视图CS_View,授权给计算机系讲授课程号为10010的数据库用户“LiYong”,让其具有视图
32、上的SELECT权限;9. 对视图CS_View上的score属性列的UPDATE权限授予用户“LiYong”,可以修改学生成绩,但不能修改其它属性列的值;10. 假设SCHOOL数据库中,每个学生的登录名都为自己在STUDENTS表中的sid,实现每个学生只能查询自己选课信息,不能查询别人的成绩,也不能修改自己的成绩。11. 结束本次实验三、 实验课后训练1. 自行练习实验指导书P81【实验2.5 综合案例】综合案例1;2. 自行练习实验指导书P122【实验3.8 综合案例】综合案例;四、 实验报告1. 授权给public与授权给指定用户有什么区别?实际应用中,哪个更安全些?2. SQL S
33、ERVER中的角色有什么作用?3. 实验总结(实验过程中出现的问题、解决方法、结果如何或其它)实验四数据库编程一、 实验目的1. 掌握ODBC的配置;2. 能编写简单的存储过程和函数,并调用;二、 实验预习内容上机前请预习以下内容,并在空白处填写相应的步骤或命令。1. 配置ODBC,使用VFP中的表单,查询SCHOOL数据库中STUDENTS表中所有记录。2. 编写存储过程并调用,请写出相应命令;1) 在查询分析器中,编写存储过程usp_get_stuinfo ,使用一个名为xm能够传送进存储过程的参数。允许以学生的姓名查询该生的基本信息;2) 在查询分析器中调用存储过程查询“赵飞”同学的基本
34、信息的语句;3. 编写函数并调用,请写出相应命令;1) 在查询分析器中,定义内联表值函数Fun,用于返回各职称的教师基本信息;2) 在查询分析器中,使用Fun进行选择以获得“教授”职称的教师基本信息;3) 在查询分析器中,编写标量函数Func,用于返回两个整数中的最大值;4) 在查询分析器中,调用此函数,输出两个数中的最大值;5) 在SQL SERVER中定义函数FUNS,返回指定参数的平方,配置好ODBC后,在VFP中调用FUNS并输出结果;4. 结束本次实验三、 实验课后训练1. 自行学习实验指导书P130【实验4.1 SQL SERVER事务的定义】;2. 自行学习实验指导书P137【实验4.2 SQL SERVER 2005事务与锁】;3. 自行练习实验指导书P165【实验4.6 游标及游标并发】;(P167 4.6.3 实验内容要完成)四、 实验报告1. 什么是ODBC?2. 内联表值函数、标量函数、存储过程有什么区别?3. 实验总结(实验过程中出现的问题、解决方法、结果如何或其它)