数据结构实验报告37353



实验一 ——数据库基本操作

一、实验目的

1.   熟悉MS SQL SERVER运行界面,掌握服务器的基本操作。

2.   掌握界面操作方法完成用户数据库建立、备份和还原。

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

二、实验预习内容

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

1.   熟悉SQL SERVER 20## 的运行环境,练习服务器基本操作:打开、停止、关闭。

2.        使用SQL SERVER 20## 中的企业管理器完成以下任务。

数据库名称: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,分别建立以上三张表,并完成数据录入。(表结构及数据参见教材)

COUTSES表:

STU表

SC表

2)  分析并建立各表的主码,用下划线在上面表结构中标出主码。

COURSE表

SC表

STUDENT 表

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

建立关联:右击SC表,设计表---在任意一个空白处右击---关系---表和列规范---选择主键表course对应的主码cno和外键表sc对应的cno以及主键表stu对应的主码sno和外键表sc对应的sno—确定即可。

   

4)  参考实验指导书的【第5章  数据库的备份和还原】,使用企业管理器对数据库STC进行备份,并尝试在个人电脑与机房电脑上进行还原,请简述备份、还原操作的步骤。

 右击STC数据库----任务—备份—备份到(添加到你要备份到的地方)---确定。

       右击STC数据库----任务—还原----数据库---(从原数据库或源设备)----选择路径--确定。

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

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

1)  用SQL语言创建数据库、建表。建表时为各表建立关键字、设置外码,数据暂不录入,请写出对应的SQL命令。

创建数据库:

Create database SCHOOL

建students表:

create table  students

(

sid char(10) primary key,

sname char(30) not null,

email char(30) ,

grade int,

)   

建teachers表:

create table teachers

(

tid char(10) primary key ,

tname char(30) not null,

email char(30),

salary int ,

)

建courses 表:

create table courses

(

cid char(10) primary key,

cname char(30) not null,

hour int ,

)

建choices表

create table choices

(

no int primary key,

sid char(10) not null,

tid char(10) not null,

cid char(10) not null,

score int ,

foreign key (sid) references students(sid),

foreign key (tid) references teachers(tid),

foreign key (cid) references courses(cid),)

5)  为students表、courses建立按主键増序排列的索引,请写出相应的SQL命令。

Students表索引:

    create index s

on students(sid asc)

courses表索引:

create index c

on courses(cid asc)

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

drop index c

on courses

4.        在SCHOOL数据库中的students表中增加一个“出生日期”字段,类型为日期时间型,请写出对应的SQL命令。

alter table students

add 出生日期datetime

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

alter table students

drop column 出生日期

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

alter table choices drop constraint FK__choices__sid__0EA330E9

  drop table students

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

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

点开数据库---找到school数据库----(右击)所有任务----分离数据库----确定。

  

   

9.使用企业管理器,使用【数据库/所有任务/附加数据库】将SCHOOL数据库添加进SQL SERVER,并查看数据。

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

drop database stc 

11.结束本次实验

三、实验课后训练

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

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

2)    向STC数据库courses表导入SCHOOL数据库courses表中的数据;

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

2.        自行练习实验指导书【实验1.1数据定义】部分。


四、实验报告

1.        简述本次实验所用到的SQL命令及其功能。

命令:creat database <数据库名>    功能:建立数据库

命令: Creat table <表名>   (<列名>  <数据类型>  [列级完整性约束条件])

[,<表级完整性约束条件>]            

功能:定义基本表

命令:alter table <表名>

      [add<新列名>  <数据类型>  [完整性约束]]-----增加新列和新的完整性约束条件

      [Drop <完整性约束名>]----删除指定的完整性约束条件

      [alter column <列名>  <数据类型> ];---修改原有的列定义,包括列名和数据类型。

功能:修改基本表

2.        在MS SQL SERVER中数据库的“分离|添加”与“备份|还原”是相同的功能吗?

在MS SQL SERVER中数据库的“分离|添加”与“备份|还原”的功能是不相同的。

分离之后的数据库在用户不更改路径的情况下会分离在系统默认的路径上,且分离之后在数据库的下属栏中找不到分离的数据库,除非重新按指定路径添加。而备份的数据库还会显示在数据库的下属栏中。

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

因为大部分作业都是在自己电脑上操作的,而我的电脑上装的的是SQL2005,所以有少部分老师上课讲的东西,在我的电脑中找不到,如:不知道如何建立关联。经过询问同学,才知道建立关联之前应先设主码,且在设计表中设置关联。

在没有看书的情况下,不知道如何建立表,经查书之后知道应先写属性名,再写数据类型,最后写约束条件。

创建索引,应该是creat index<索引名>on <表名>[次序]。

删除索引页一样 drop index <索引名>。

修改表:alter table<表名> 如果增加列就是add 列名 数据类型,若删除列,则同样在上述基础上,drop column 列名。

若删除基本表则需要先修改约束关系再用drop语句删除表如:

alter table choices drop constraint FK__choices__sid__0EA330E9

  drop table students(约束关系可用SP_HELP 表名!!!是下划线)。

虽然实验完成需要的时间很多,但总体收获还是很大的。


实验二——SQL语句

一、实验目的

1.   熟悉SQL的数据查询语言,能使用SQL进行单表查询、连接查询、嵌套查询、集合查询和统计查询,能理解空值的处理;

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

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

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

二、实验预习内容

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

1.        使用SCHOOL数据库,在SQL SERVER 20## 的查询分析器使用SQL语言完成以下操作。请在空白处填写相应的SQL命令。

1)  查询年级为2001的所有学生的名称,按编号顺序排列;

select sname

from STUDENTS

where grade='2001'

order by sid

2)  查询所有课程名称中含有data的课程编号;

SELECT CID

FROM COURSES

WHERE CNAME LIKE '%DATA%'

3)  统计所有老师的平均工资;

SELECT AVG(SALARY)

FROM TEACHERS

4)  查询至少选了3门课的学生编号;

SELECT SID

FROM CHOICES

GROUP BY SID HAVING COUNT(*)>=3

5)  查询学号为80009026的学生的姓名、所选课名及成绩;

SELECT students.SNAME, COURSES .CNAME, CHOICES .SCORE

FROM CHOICES,COURSES,STUDENTS

WHERE STUDENTS.SID=800009026 and CHOICES.sid=students.sid and choices.cid =courses.cid

6)  查询没有学生选的课程编号;

select cid

from courses

where cid not in (

select cid

from choices )

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

Select distinct sid

from choices

where cid =

(select cid

from courses

where cname ='c++') and sid in

(select sid  from choices

where cid in

(select cid from courses

where cname ='java'))

8)  查询选了C++但没选Java课程的学生编号;

Select sid

from choices

where cid =

(select cid

from courses

where cname ='c++') and sid not in

(select sid  from choices

where cid in

(select cid from courses

where cname ='java'))

9)  向STUDENTS表中插入“LiMing”的个人信息(编号:700045678,名字:LiMing,Email:LX@cdemg.com,年级:1992);

insert

into students

values ('700045678','LiMing','LX@cdemg.com','1992')

10)            将“LiMing”的年级改为2002;

update students

set grade='2002'

where sname ='LiMing'

11)            删除所有选了Java课程的学生选课记录;

delete

from choices

where cid=

(select cid

from courses

where cname='java')

12)            求出每门课的课程号、选课人数,结果存入数据库表T1中。

CREATE TABLE T1(

CID CHAR(10) PRIMARY KEY ,

RS INT )

INSERT INTO T1

SELECT CID,COUNT(DISTINCT SID)

FROM CHOICES

GROUP BY CID

13)            查询所有选课记录的成绩并换算为五分制(注意NULL的情况);

select distinct  score,score/20

from choices

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

select sid, cid

from choices

where score<0

select distinct count(*),avg(score),max(score),min(score)

from choices

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

select distinct *

from choices

order by score asc

16)            创建视图V1,显示学生姓名、所选课名称、任课教师名;

create view v1 (sname,cname,tname)

as

select students.sname,courses.cname,teachers.tname

from teachers,choices ,students,courses

where choices.cid=courses.cid and choices.sid=students.sid and choices.tid=teachers.tid ;

17)            取消V1视图;

drop view v1

2.        使用STC数据库,在SQL SERVER 20## 的查询分析器使用SQL语言完成以下操作。请在空白处填写相应的SQL命令或其它内容。

1)  创建视图V2,显示计算机(CS)系学生信息;(结合下面的b)小题,V2视图创建2次,分别使用/不使用WITH CHECK OPTION选项)

2)  插入元组(99999,张三,20岁,男,PH)到V2中,运行结果如何?(观察WITH CHECK OPTION对结果的影响);

3)  在V2基础上,查询所有计算机系女生信息;

SELECT *

FROM 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.        SQL SERVER中变量声明的命令是什么?输出命令是什么?

2.        SQL SERVER中实现分支和循环的语句分别是什么?

3.        在SQL SERVER里使用ORDER BY排序时,NULL值如何处理?使用GROUP BY分组时,NULL值又如何处理的?

在使用ORDER BY 进行排序时,有ASC(升序)和DESC(降序)两种方式。无论采用哪种方式,NULL值总被当作最小值处理。即在按升序排列时,取空值的元组将最先显示,按降序排时,取空值的元组将会最后显示。

   使用GROUP BY 进行排序,取空值的项不是被忽略,而是将NULL看成一个取值,在处理的时候把所有取空值的项都看成一样,因而形成一个分组。

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

出现的问题:1.有好多次运行都是有检查完成但是执行错误,经检查才知道是上面的数据库默认是master,而不是要执行的数据库。2.由于粗心导致的字母拼写错误,导致执行结果出错。3.不会使用嵌套语句,经过分析书上的程序段,略微懂了一点。4.向表中插入记录,应该用insert into 表名  values(列属性)。5.更改属性用update 表名 set (属性=要更改的值)。6.本来12题不会i,经过查看实验指导书,知道要把一系列属性值重新插入到新表中需要两步,一是先创建表,再插入记录。7.创建视图用create view (视图名) as from 表名 。8.知道了with check option 可以自动筛选不符合条件的记录。


实验三——数据库完整性与安全性

一、实验目的

1.   理解实体完整性、参照完整性、用户自定义完整性的概念,学习三类完整性的实现,了解违反完整性的结果;

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_id(varchar(4)),Name(varchar(10)),Department(varchar(20))三个属性列,其中Class_id为主码;

2)  执行两次相同的插入操作(’0001’,’01csc’,’cs’),结果如何;

INSERT

INTO CLASS

VALUES('0001','01CSC','CS')

违反了 PRIMARY KEY 约束 'PK_class'。不能在对象 'class' 中插入重复键。

语句已终止。

2.        使用SQL命令创建一张学生互助表,要求:包括学生编号、学生姓名、学生帮助对象的编号,每个学生有且仅有一个帮助对象,帮助的对象必须是已存在的学生。

create table 学生互助表

(sid varchar(10) primary key,

 sname varchar(30),

 s_id varchar(10) unique,

 foreign key (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)  设置SQL SERVER的安全认证模式;

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

3)  取消“LiYong”用户;

7.        先以sa帐号登录,要实现如下表的权限管理,请按先后顺序写出相应的SQL语句(假设所有用户尚未定义,其密码均为123,并加以必要的说明。

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 综合案例】综合案例;


四、实验报告

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

2.        SQL SERVER中的角色有什么作用?

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

在创建学生互助表时,没有注意到UNIQUE的用法,不会自己跟自己关联。


实验四——数据库编程

一、实验目的

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 实验内容要完成)


四、实验报告

1.        什么是ODBC?

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

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

相关推荐