数据结构实验报告3543435

更新时间:2023-09-14 06:35:01 阅读量: 初中教育 文档下载

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

合肥师范学院

实验报告册

2013 / 2014 学年 第2 学期

系 别 实验课程 专 业 班 级 姓 名 学 号 指导教师

计算机科学与技术系

数据库原理 计算机软件 软件一班 周锦 1210431081 潘洁珠

实验名称 实验(一)——数据库基本操作 课时 实验报告成绩 2 6 4 4 实验(二)——SQL语句 实验(三)——数据库完整性与安全性实验 实验(四)——数据库编程 备注:

《数据库原理》实验 班级: 学号: 姓名: 实验一 ——数据库基本操作

一、实验目的

1. 熟悉MS SQL SERVER运行界面,掌握服务器的基本操作。 2. 掌握界面操作方法完成用户数据库建立、备份和还原。

3. 建立两个实验用的数据库,使用企业管理器和查询分析器对数据库和表进行基本操作。

二、实验预习内容

在认真阅读教材及实验指导书的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。

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), cno char(3), grade int );

说明:以上为表结构,以sno char(9)为例,说明sno属性设置为字符类型,宽度为9,int指整型数据。

1) 建立数据库STC,分别建立以上三张表,并完成数据录入。(表结构及数据参见教材)

建立数据库:数据库→右击鼠标→新建数据库,出现如上图所示的框,然后填上所建数据库的名称。

1

《数据库原理》实验 班级: 学号: 姓名: STU表

建立表:数据库→STC→右击鼠标→新建→表,出现如上所示的表,在表中填上所要的属

性名及数据类型等,填完后点击左上角的关闭按钮后,会出现一个更改表明的框,进行命名,点击确定即可。

STU表数据录入

2

《数据库原理》实验 班级: 学号: 姓名: COURSE 表数据录入

SC表数据录入

表数据的录入:数据库→STC→表→STU(COURSE,SC)→右击鼠标→打开表→返回所有行,在如上所示的表中录入数据,输入后直接点击右上角的关闭按钮即可。 2) 分析并建立各表的主码,用下划线在上面表结构中标出主码。

STU表的主码是sco,COURSE表的主码是cno,SC表的主码是cno,sno。 STC表的主码设置

3

《数据库原理》实验 班级: 学号: 姓名: COURSE主码的设置

SC主码设置

主码的设置:右击表→设计表,出现如上所示的图,右击你要设置的那一属性名前的空格,出现设置主键,点击即可。

3) 建立各表之间的关联,请简述操作步骤。

关联图如下:

4

《数据库原理》实验 班级: 学号: 姓名:

建立各表之间的关联:数据库→STC→关系图→出现一个框图→点击你要关联的表→确定,得到如上所示的图,将它们之间的关联用线连起。

4) 参考实验指导书的【第5章 数据库的备份和还原】,使用企业管理器对数据库STC

进行备份,并尝试在个人电脑与机房电脑上进行还原,请简述备份、还原操作的步骤。

备份截图

备份操作:数据库→STC→右击→所有任务→备份数据库,得到如上所示的图,再选择你要备份到的地方。 还原截图

5

《数据库原理》实验 班级: 学号: 姓名:

还原操作:数据库→右击→所有任务→还原数据库,得到如上所示的图,从磁盘→选择路径→确定。

3. 在SQL SERVER 2000 的查询分析器中使用SQL语言完成以下任务。

参考实验指导书《数据库系统实验指导教程》【实验1.1 数据定义】,建立数据库SCHOOL,分别建立students、teachers、courses、choices四张表,表结构见实验指导书P236 【附录A】。

1) 用SQL语言创建数据库、建表。建表时为各表建立关键字、设置外码,数据暂不录

入,请写出对应的SQL命令。

创建数据库 create database SCHOOL 建立学生表

CREATE TABLE students (sid char(10) primary key, sname char(30) not NULL, email char(30) , grade int,

);

建立教师表

CREATE TABLE teachers (tid char(10) PRIMARY KEY, tname char(30)not NULL, emai char(30), salary int, );

建立课程表

CREATE TABLE courses

(cid char(10) PRIMARY KEY, cname char(30)not NULL,

6

《数据库原理》实验 班级: 学号: 姓名: hour int, );

建立选课表

create table choices (no int PRIMARY KEY, sid char(10) not NULL, tid char(10),

cid char(10) not NULL, score int,

FOREIGN KEY(sid)REFERENCES student(sid), FOREIGN KEY(cid)REFERENCES course (cid), FOREIGN KEY(tid)REFERENCES teachers (tid), );

2) 为students表、courses建立按主键増序排列的索引,请写出相应的SQL命令。 create unique index studentsid on student(sid); create unique index coursecid on course(cid);

3) 删除course上的索引,请写出相应的SQL命令。 drop index course.coursecid

4) 在SCHOOL数据库中的students表中增加一个“出生日期”字段,类型为日期时间

型,请写出对应的SQL命令。

alter table student add ‘出生日期’ datetime

5) 删除students中的“出生日期”字段,请写出对应的SQL命令。

alter table student drop column ‘出生日期’

6) 删除SCHOOL数据库中的students表,请写出对应的SQL命令。

Drop table student cascade

4. 使用企业管理器创建数据库SCHOOL,实现内容与实验预习内容3完全相同。

5. 使用企业管理器,将SCHOOL数据库分离出MS SQL SERVER,请简述步骤。

7

《数据库原理》实验 班级: 学号: 姓名:

8

《数据库原理》实验 班级: 学号: 姓名:

分离数据库操作:数据库→SCHOOL→右击→所有任务→分离数据库,出现如上所示的框图,点击确定即可。

6. 使用企业管理器,使用【数据库/所有任务/附加数据库】将SCHOOL数据库添加进SQL

SERVER,并查看数据。 附加操作截图

9

《数据库原理》实验 班级: 学号: 姓名:

查看数据截图

附加数据库操作:数据库→右击→所有任务→附件数据库,从设备中找到SCHOOL_mdf,确定即可。

查看数据:数据库→SCHOOL→表→选择查看到的表→右击→打开表→返回所有行。

7. 使用查询分析器,删除数据库STC,请写出对应的SQL命令。 DROP DATABASE STC;

8. 结束本次实验

三、实验课后训练

1. 使用企业管理器练习数据的导入导出。

1) 将SCHOOL数据库students表中的数据导出到STC数据库对应的stu表中; 2) 向STC数据库courses表导入SCHOOL数据库courses表中的数据;

3) 自行练习实验指导书【实验5.3 SQL SERVER数据库的导入与导出】部分; 2. 自行练习实验指导书【实验1.1数据定义】部分。

10

《数据库原理》实验 班级: 学号: 姓名: 四、实验报告

1. 简述本次实验所用到的SQL命令及其功能。 创建数据库 create database <数据库名> 创建表 create table <表名>

创建索引create unique index <索引名>on <表名>(<列名>) 增加属性 alter table <表名> add <列名><数据类型> 删除某属性名 alter table <表名> drop column <列名> 删除某表 Drop table <表名>

删除数据库 DROP DATABASE <数据库名>

2. 在MS SQL SERVER中数据库的“分离|添加”与“备份|还原”是相同的功能吗? 答:不相同。数据库的备份是数据库结构、对象和数据的“副本”,使得数据库系统在发生故障后还能还原和恢复数据库中的数据。数据库的还原是数据库备份的逆操作,将数据库恢复到备份前的状态。数据库的分离指的是将数据库的附加的逆过程,就是把完整地数据库文件和日志文件从服务器上分离下来,分离后的数据库文件在拷贝和移动后可以附加在其他的计算机上,附加是分离的逆过程。

3. 实验总结(实验过程中出现的问题、解决方法、结果如何或其它)

出现的问题:①在这次实验过程中,对数据库进行了备份,再下次实验时无法还原数据库了。

②在写为SCHOOL数据库中的students表中增加一个“出生日期”字段,类型为日期时间型是,我写的命令是alter table student add ‘出生日期’ date,提示我没有此类型。

③在写删除SCHOOL数据库中的students表这一命令时,出现如下错误:

解决方法:问题一,问了同学,将数据库进行分离,再进行附加,则可以将上次的数据库重新放入电脑中;

问题二,根据所给的提示将命令改为alter table student add ‘出生日期’ datetime;

问题三,通过找书上的相关知识,在未加cascade 时,表的删除是有限制条件的,存在依赖所删除的表的对象,所以无法删除,加上cascade,表的删除时没有限制条件的。

结果:命令的到正确的运行,实验完成。

通过这次实验,对SQL的一些命令及其功能有了了解,同时在实验中还要养成良好的实验习惯,做实验要细心,提前预习,这样可以大大减少实验的错误率。

11

《数据库原理》实验 班级: 学号: 姓名: 实验二——SQL语句

一、实验目的

1. 熟悉SQL的数据查询语言,能使用SQL进行单表查询、连接查询、嵌套查询、集合查询

和统计查询,能理解空值的处理;

2. 熟悉数据库的数据更新操作,能使用SQL语句对数据库进行数据的插入、更新、删除操

作;

3. 熟悉SQL支持的有关视图的操作,能创建、查询及取消视图;

4. 了解NULL在数据库中的特殊含义,掌握使用SQL进行与空值相关的操作;

二、实验预习内容

在认真阅读教材及实验指导书【实验1.2 数据查询】、【实验1.3 数据更新】、【实验1.4 视图】和【实验1.6 空值和空集的处理】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。

1. 使用SCHOOL数据库,在SQL SERVER 2000 的查询分析器中使用SQL语言完成以下操

作。请在空白处填写相应的SQL命令。

1) 查询年级为2001的所有学生的名称,按编号顺序排列; select sname from students where grade=2001 order by sid ASC

2) 查询所有课程名称中含有data的课程编号; select cid from courses where cname='data'

3) 统计所有老师的平均工资; select avg(salary) from teachers

4) 查询至少选了3门课的学生编号; select sid from choices group by sid

having count(cid)>=3

5) 查询学号为800009026的学生的姓名、所选课名及成绩; select students.sname,courses.cname,choices.score from students,courses,choices

where students.sid=800009026 and students.sid=choices.sid and courses.cid=choices.cid 6) 查询没有学生选的课程编号; select cid from courses where cid not in (

select cid from choices )

7) 查询既选了C++又选了Java课程的学生编号; select sid from choices

12

《数据库原理》实验 班级: 学号: 姓名: where cid =(select cid from courses

where cname='C++') and sid in (select sid from choices

where cid=(select cid from courses where cname='Java')) 8) 查询选了C++但没选Java课程的学生编号; select distinct sid from choices

where cid =(select cid from courses

where cname='C++') and sid not in (select sid from choices

where cid=(select cid from courses where cname='Java'))

9) 向STUDENTS表中插入“LiMing”的个人信息(编号:700045678,名字:LiMing,

Email:LX@cdemg.com,年级:1992); insert

into students(sid,sname,email,grade)

values('700045678','LiMing','LX@cdemg.com','1992') 10) 将“LiMing”的年级改为2002; update students set grade='2002'

where sname='LiMing'

11) 删除所有选了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, num char(10) )

insert into T1

select cid,count(sid) from choices group by cid

13) 查询所有选课记录的成绩并换算为五分制(注意NULL的情况); select distinct score,score/20 from choices

14) 查询成绩小于0的选课记录,统计总数、平均分、最大值和最小值(注意查询结

果中NULL的情况);

select count(*),avg(score),max(score),min(score) from choices where score<0

15) 按成绩顺序排序显示CHOICES表中所有记录。(使用ORDER BY排序,注意

13

《数据库原理》实验 班级: 学号: 姓名: name char(8), sex char(1), sage int ,

department char(20) );

2) 定义约束U1、U2,其中U1规定Name字段取值唯一,U2规定sage字段上限是28; create table WORKER

( number char(5) primary key,

name char(8) constraint U1 unique, sex char(1),

sage int constraint U2 check(sage<=28), department char(20) );

3) 插入一条合法记录; insert

into worker(number,name,sex,sage,department) values('0005','张丽','W','25','信息部')

4) 插入一条违反U2约束的记录,简述观察到的结果如何?并分析原因; 插入的语句如下: insert

into worker(number,name,sex,sage,department) values('0006','李勇','M','30','信息部')

服务器报错,在WORKER 表中无法插入该条记录,因为INSERT 语句与 COLUMN CHECK 约束 'U2' 冲突,该冲突发生于数据库 'School',表 'WORKER', column 'sage' 5) 去除U1约束;

6) 修改约束U2,令sage的值大于等于0; alter table worker drop constraint U2 alter table worker

add constraint U2 check(sage>=0) 7) 创建规则rule_sex,规定更新或插入的值只能是M或F,并绑定到Worker的sex字段; create Rule rule_sex as @value in ('F','M') go

exec sp_bindrule rule_sex,'worker.[sex]';

8) 插入2条记录,一条满足规则rule_sex,一条违反规则,观察结果。 5. 使用查询分析器创建触发器并测试,请写出相应的语句:

1) 为Worker表创建触发器T1,当插入或更新表中数据时,保证所操作记录的sage大于

0;

2) 为Worker表创建触发器T2,禁止删除编号为00001的记录;

3) 为Worker表创建触发器T3,要求更新一个记录时,表中记录的sage要比老记录的

sage的值大。

6. 分别用企业管理器和查询分析器实现用户的标识并测试,请写出相应的操作过程或对应

的语句:

19

《数据库原理》实验 班级: 学号: 姓名: 1) 设置SQL SERVER的安全认证模式;

2) 建立名为“LiYong”的登录用户、数据库用户,默认访问SCHOOL数据库,密码为

“abcd”;

3) 取消“LiYong”用户;

7. 先以sa帐号登录,要实现如下表的权限管理,请按先后顺序写出相应的SQL语句(假设所有用户尚未定义,其密码均为123),并加以必要的说明。 编号 授权用户名 被授权用户名 1 2 3 4 5 6 7 8 SA SA SA SA U3 U4 SA SA U1 U2 PUBLIC U3 U4 U5 U6 U7 数据库对象名 Students Students Choices Students Students Students Choices Students.sname 允许的操作类型 SELECT ALL SELECT SELECT SELECT SELECT INSERT UPDATE 能否转授权 不能 不能 不能 能 能 不能 能 不能

8. 创建在SCHOOL数据库中choices上的视图CS_View,授权给计算机系讲授课程号

为’10010’的数据库用户“LiYong”,让其具有视图上的SELECT权限; 9. 对视图CS_View上的score属性列的UPDATE权限授予用户“LiYong”,可以修改学生成

绩,但不能修改其它属性列的值;

10. 假设SCHOOL数据库中,每个学生的登录名都为自己在STUDENTS表中的sid,实现每

个学生只能查询自己选课信息,不能查询别人的成绩,也不能修改自己的成绩。 11. 结束本次实验

三、实验课后训练

1. 自行练习实验指导书P81【实验2.5 综合案例】综合案例1; 2. 自行练习实验指导书P122【实验3.8 综合案例】综合案例;

20

《数据库原理》实验 班级: 学号: 姓名: 四、实验报告

1. 授权给public与授权给指定用户有什么区别?实际应用中,哪个更安全些? 2. SQL SERVER中的角色有什么作用?

3. 实验总结(实验过程中出现的问题、解决方法、结果如何或其它)

21

《数据库原理》实验 班级: 学号: 姓名: 实验四——数据库编程

一、实验目的

1. 掌握ODBC的配置;

2. 能编写简单的存储过程和函数,并调用;

二、实验预习内容

上机前请预习以下内容,并在空白处填写相应的步骤或命令。

1. 配置ODBC,使用VFP中的表单,查询SCHOOL数据库中STUDENTS表中所有记录。 2. 编写存储过程并调用,请写出相应命令;

1) 在查询分析器中,编写存储过程usp_get_stuinfo ,使用一个名为@xm能够传送进存储过

程的参数。允许以学生的姓名查询该生的基本信息;

2) 在查询分析器中调用存储过程查询“赵飞”同学的基本信息的语句; 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 实验内容要完成)

22

《数据库原理》实验 班级: 学号: 姓名: 四、实验报告

1. 什么是ODBC?

2. 内联表值函数、标量函数、存储过程有什么区别?

3. 实验总结(实验过程中出现的问题、解决方法、结果如何或其它)

23

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

Top