数据结构实验报告34354



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

一、实验目的

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

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

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

 

建立关系的主要步骤:

1.右击SC——设计表——管理关系——新建——主键表为sno——外键表为sno

2.右击COUTSES——设计表——管理关系——新建——主键表为cno——外键表为cno

3.右击STU——设计表——管理关系——新建——主键表为sno——外键表为sno

    

4)  参考实验指导书的【第5章  数据库的备份和还原】,使用企业管理器对数据库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 unique,

 email char(30),

 grade int

);  

建立teachers表

create table teachers

( tid char(10) primary key,

 tname char(30) not null unique,

 email char(30),

 salary int

);

建立courses表

create table courses

( cid char(10) primary key,

 cname char(30) not null unique,

 hour int,

);

建立choices表

create table choices

( no int primary key,

sid char(10) not null unique,

 tid char(10),

 cid char(10) not null unique,

 score int

 foreign key (sid) references students(sid),

foreign key (tid) references teachers(tid),

foreign key (cid) references courses(cid),

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

create unique index stusid on students(sid);

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

drop index coucid;

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

alter table students add birthday date;

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

         aer table students drop birthday;lt

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

   drop table stu cascade

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

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

 

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

       

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

    drop stc cascade

8.        结束本次实验

三、实验课后训练

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

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

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

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

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


四、实验报告

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

Create table 创建表; drop table 删除表;

create unique index stusno on stu(sno)索引

primary key:主码

Alter table stu drop column chushengriqi删除表中属性

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

  不一样, “分离|添加”是在原有的数据库基础上分离,可以对数据进行删除,修改等等。我们可以带着这个文件在其他地方添加后继续使用;“备份|还原”是在原有的数据库进行复制。

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

 

    刚开始接触SQL,很多操作不能理解。在慢慢的摸索中,理解一些用处及上课所学的知识。在使用SQL建立主码,增加属性等等都不会。在慢慢的学习中,会掌握这些基本的东西。
实验二——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 sname,cname,score

           from students,choices,courses

where students.sid =choices.sid and choice.cid=courses.cid and students.sid=80009026

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

Select cname

from courses

where cid not  in

(

select cid

from choicesl

)

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

select 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 in(

                    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(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 cid in(

                    select cid

                    from courses

                    where cname=’java’

)

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

         create table T1(cid char(10) primary key, renshu int )

         insert into T1(cid, renshu)

         select cid,count(distinct sid)

         from choices group by cid

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

         select no,sid,tid,cid,score/20 score

         from choices

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

        select * from CHOICES

        where score<60 or score is NULL

        select sum(score) '总分数',avg(score) '平均分',max(score) '最大值',min(score) '最小值'

        from choices

        where score<60 or score is NULL

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

       select *

       from choices

       order by score asc

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

       create view sudent_xuanke(sname,cname,tname)

      select sname,cname,tname

      from STUDENTS join CHOICES on STUDENTS.sid = CHOICES.sid join COURSES on COURSES.cid = CHOICES.cid join TEACHERS on TEACHERS.tid = CHOICES.tid

17)            取消V1视图;

   drop view sudent_xuanke

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基础上,查询所有计算机系女生信息;

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值又如何处理的?

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


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

一、实验目的

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’),结果如何;

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

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.        实验总结(实验过程中出现的问题、解决方法、结果如何或其它)


实验四——数据库编程

一、实验目的

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.        实验总结(实验过程中出现的问题、解决方法、结果如何或其它)

相关推荐