数据库实验指导书.docx
《数据库实验指导书.docx》由会员分享,可在线阅读,更多相关《数据库实验指导书.docx(35页珍藏版)》请在冰豆网上搜索。
数据库实验指导书
巢湖学院计算机与信息工程学院
数
据
库
实
验
指
导
书
指导者:
刘拥
二零一二年二月
目录
实验一SQLSEVER2005的系统工具及用户管理、使用交互方式建库、建表.....................................................3
实验二T—SQL的简单查询、连接查询....................15
实验三子查询及组合....................................23
实验四数据库的更新、视图的定义及使用..................224
实验五数据导入/导出、数据备份和恢复....................26
实验六数据完整性和数据安全性...........................33
实验七存储过程和触发器.................................35
实验八嵌入式SQL.......................................37
实验一SQLSEVER2005的系统工具及用户管理、使用交互方式建库、建表
一、实验目的:
认识SQLSEVER2000的服务管理器,了解客户端和数据库服务器的连接过程,初步掌握和使用EnterpriserManager以交互方式创建数据库、表、索引和修改表结构,熟练掌握使用EnterpriserManager向数据库输入数据、修给数据和删除数据的操作。
二、实验内容:
1.启动数据库服务软件SQLServer2000:
在程序菜单中选择MicrosoftSQLServer,如图1-1所示:
图1-1
再选中服务管理器,如图1-2所示:
图1-2
点击服务管理器后,出现SQLServer服务管理器,如图1-3所示:
图1-3
点击“开始/继续”按钮,启动SQLServer2000数据库服务。
启动成功后,在时钟旁边出现一个
符号,如图1-4所示。
图1-4
2.在SQLServer2000中建立数据库:
在程序菜单中选择MicrosoftSQLServer,如图1-5所示:
图1-5
再选中企业管理器,如图1-6所示:
图1-6
点击企业管理器后,出现企业管理器的主界面,如图1-7所示:
图1-7
点击左边树状控制栏的+/-号可以打开和关闭SQLServer组中的本地服务项目,在选中数据库服务项目后,单击鼠标右键,出现数据库的菜单,如图1-8所示:
图1-8
点击新建数据库,出现新建数据库窗口,如图1-9所示:
图1-9
输入数据库名称:
Test(以Test为例),点击数据文件选项卡,如图1-10所示:
图1-10
在数据文件中,你可以设定数据文件的名称,所在目录以及文件的大小等信息。
完成后点击事务日志选项卡,如图1-11所示:
图1-11
事务日志中,你可以设定日志文件的名称,所在目录以及文件的大小等信息。
接受系统的缺省值,点击确定按钮,完成数据库的新建,如图1-12所示。
图1-12
3.在Test数据库上建立表:
点击数据库Test前面的+号,打开数据库的各种属性,如图1-13所示:
图1-13
选中表的属性,单击鼠标右键,出现表的菜单,如图1-14所示:
图1-14
点击新建表按钮,出现新建表窗口,如图1-15所示:
图1-15
输入列名,数据类型,长度等信息,点击
图标,出现选择表名窗口,如图1-16所示:
图1-16
输入表名,点击确定按钮,将新建的表存盘。
三、实验任务:
1.用数据库SQLServer2000的服务管理器启动数据库服务;
2.用数据库SQLServer2000的企业管理器建立一个数据文件名为Studentdata、日志文件名为Studentlog、大小25M的新数据库,该数据库名为Student。
3.在数据库Student上,建立如下所示的表Student,Course,SC的结构:
Student:
表1-1
字段名
类型
长度
含义
Sno
varchar
9
学号
Sname
varchar
20
姓名
Ssex
varchar
2
性别
Sage
snallint
4
年龄
Sdept
varchar
10,2
系
Course:
表1-2
字段名
类型
长度
含义
Cno
varchar
4
课程号
Cname
varchar
40
课程名
Cpno
varchar
4
先行课
Ccredit
smallint
4
学分
SC:
表1-3
字段名
类型
长度
含义
Sno
varchar
9
课程号
Cno
varchar
4
成绩
Grade
varchar
smallint
根据以上表的结构,输入以下内容:
Student:
表1-4
学号
Sno
姓名
Smane
性别
Ssex
年龄
Sage
所在系
Sdept
200215121
李勇
男
20
CS
200215122
刘晨
女
19
CS
200215123
王敏
女
18
MA
200215125
张立
男
19
IS
Course:
表1-5
课程号Cno
课程名Cname
先行课Cpno
学分Credit
1
数据库
5
4
2
数学
2
3
信息系统
1
4
4
操作系统
6
3
5
数据结构
7
4
6
数据处理
2
7
PASCAL语言
6
4
SC:
表1-6
学号Cno
课程号Cno
成绩Grade
200215121
1
92
200215121
2
85
200215121
3
88
200215122
2
90
200215122
3
80
4.定义数据库
CreateDB数据库名;
5.定义模式
CREATESCHEMA〈模式名〉AUTHORIZATION〈用户名〉
6.定义基本表
CREATETABLE〈表名〉(〈列名〉〈数据类型〉[列级完整性约束条件]
[,〈列名〉〈数据类型〉[列级完整性约束条件]]
……[,〈表级完整性约束条件〉]);
[例]建立一个“学生”表Student。
CREATETABLEStudent
(SnoCHAR(9)PRIMARYKEY,
SnameCHAR(20)UNIQUE,
SsexCHAR
(2),
SageSMALLINT,
SdeptCHAR(20)
);
[例]建立一个“课程”表Course。
CREATETABLECourse
(CnoCHAR(9)PRIMARYKEY,
CnameCHAR(40),
CpnoCHAR(4),
CcreditSMALLINT,
FOREIGNKEY(Cpno)REFERENCESCourse(Cno)
);
[例]建立学生选课表。
CREATETABLESC
SnoCHAR(9),
CnoCHAR(9),
GradeSMALLINT,
PRINARYKEY(Sno,Cno),
FOREINGKEY(Sno)REFERENCESStudent(Sno),
FOREINGKEY(Cno)REFERENCESCourse(Cno)
);
实验二T—SQL的简单查询、连接查询
一、实验目的:
掌握SQLServerQueryAnalyze的使用方法,加深对SQL的语句,特别是对查询语句的理解。
本次实验了解SQLServer2000查询分析器的启动,熟悉如何在SQLServer2000查询分析器中建表、插入记录、查询记录。
学会SQLServer2000的查询分析器中建表、插入记录、查询记录。
二、实验内容:
1.启动数据库服务软件SQLServer2000的查询分析器:
在程序菜单中选择MicrosoftSQLServer,如图2-1所示:
图2-1
再选中查询分析器,如图2-2所示:
图2-2
点击查询分析器后,出现连接到SQLServer窗口,如图2-3所示:
图2-3
点击
按钮,出现选择服务器窗口,如图2-4所示。
图2-4
选择本地服务(Local),点击确定按钮。
再点击连接到SQLServer窗口的确定按钮。
出现SQL查询分析器主界面,如图2-5所示。
图2-5
选择查询菜单,点击更改数据库,如图2-6所示。
图2-6
出现选择数据库窗口,如图2-7所示。
图2-7
选择在上次实验中建立的数据库Test,点确定按钮。
2.在查询分析器中建立表:
在查询分析器的查询窗口中输入SQL语句,如图2-8所示。
图2-8
点击
按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图2-9所示。
图2-9
提示命令成功完成,或者报告出错信息。
3.查询分析器中向表添加数据:
在查询分析器的查询窗口中输入SQL语句,如图2-10所示。
图2-10
点击
按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图2-11所示。
图2-11
1.从表中查询数据:
在查询分析器的查询窗口中输入SQL语句,如图2-12所示。
图2-12
点击
按钮,执行该SQL语句,在查询窗口下部出现一个输出窗口,如图2-13所示。
图2-13
三、实验任务
1.打开数据库SQLServer2000的查询分析器,利用实验一所建立的库Student,针对改库中的表Student,Course,Sc作如下操作:
1.查询全体学生的学号与姓名
2.查询全体学生的姓名、学号、所在系
3.查询全体学生的详细记录
4.查询全体学生的姓名及其出生年份
5.查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示所有系名。
6.查询选修了课程的学生学号
7.查询计算机科学系全体学生的名单
8.查询所有年龄在20岁以下的学生姓名及其年龄
9.查询考试成绩有不及格的学生的学号
10查询年龄在20~30岁之间的学生的姓名、系别和年龄。
11.查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别
12.查询学号为200215121的学生的详细情况
13.查询所有姓刘的学生的姓名、学号和性别
14.查询某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
15.查询所有成绩的学生的学号和课程号
16.查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
17查询选修课程的学生人数
18查询选修了1号课程的学生最高分数
19.求各个课程及相应的选课人数
20.查询每个学生及其选修课程的情况
21查询每一门课的间接选修课
22.查询每个学生的学号、姓名、选修的课程名及成绩
实验三子查询及组合
一、实验目的:
进一步掌握QueryAnalyzer的使用方法,加深对SQL和嵌套查询语句的理解,熟练掌握数据查询中分组、统计、计算和组合的操作方法。
二、实验内容:
1.启动数据库服务软件SQLServer2000的查询分析器,在RDMBS中建立一个数据库,进行实验所要求的各种操作,所有的SQL操作均在此建立的新库里进行。
2.根据以下要求认真进行实验,记录所有的实验用例。
数据定义:
基本表的定义。
数据操作:
完成子查询(分组,统计,计算和组合)。
三、实验任务:
打开数据库SQLServer2000的查询分析器,根据实验一:
所建立的数据库Student,在此库下所建立的三个表Student,SC,Course。
完成如下的功能的实验:
(1).带有IN谓词的子查询
(2).带有比较运算符的子查询
(3).带有ANY(SOME)或ALL谓词的子查询
(4).带有EXISTS谓词的子查询
实验的步骤如下:
1.查询与“刘晨”在同一个系学习的学生
2.查询选修了课程名为“信息系统”的学生学号和姓名
3.找出每个学生超过他选修课程平均成绩的课程号
4.查询其他系中比计算机科学系某一个学生年龄小的学生的姓名和年龄
5.查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄
6.查询所有选修了1号课程的学生姓名
7.查询没有选修1号课程的学生姓名
8.查询选修了全部的学生姓名
9.查询至少选修了学生200215122选修的全部课程的学生号码
10查询计算机科学系的学生及年龄不大于19岁的学生
11.查询选修了课程1或者选修了课程2的学生
12.查询计算机科学系的学生与年龄不大于19岁的学生的交集
13.查询既选修了课程1又选修了课程2的学生。
14.查询计算机科学系的学生与年龄不大于19岁的学生的差集
实验四数据库的更新、视图的定义及使用
一、实验目的:
掌握SQL中的插入、修改和删除语句的用法;掌握视图创建语句和视图创建向导的使用方法,加深对视图作用的理解。
二、实验内容:
1.启动数据库服务软件SQLServer2000的查询分析器,用如下语句对表进行操作,详细的语法格式参看课本相应章节:
Insertinto表名…插入数据
Update表名Set…修改数据
DeleteFrom表名…删除数据
DropTable删除表
AlterTable更改表
2.用如下语句对视图进行操作,详细的语法格式参看课本相应章节:
CreateView建视图
DropView删除视图
三、实验任务
1.打开数据库SQLServer2000的查询分析器,根据实验一:
所建立的数据库Student,在此库下所建立的三个表Student,SC,Course。
完成如下的功能的实验:
1.将一个新学生元组(学号:
200215128;姓名:
陈冬;性别:
男;所在系:
IS;年龄:
18岁)插入到Student表中
2.将学生张成民的信息插入到Student表中
3.插入一条选课记录(‘200215128’,‘1’)
4.对每一个系,求学生的平均年龄,并把结果存入数据库
5.将一个学生200215121的年龄增加1岁
6.将计算机科学系全体学生的成绩置零
7.删除学号为200215128的学生的记录
8.删除所有的学生选课记录
9.删除计算机科学系所有学生的选课记录
10.建立信息系学生的视图
11.建立信息系选修了1号课程的学生的视图
12定义一个反映学生出生年份的视图
13.将学生的学号及他的平均成绩定义为一个视图
14.将Student表中所有女生记录定义为一个视图
15.用DropView删除上述所建立的视图。
16.在信息系学生的视图中找出年龄小于20岁的学生
17.查询选修了1号课程的信息系学生
18.将信息系学生视图IS_Student中学号为200215122的学生姓名改为“刘晨”
19.将以上的SQL语言存盘,以备老师检查。
实验五数据的导入/导出、数据库备份和恢复
一、实验目的:
掌握SQLServer数据的导入/导出,了解SQLServer的数据备份和恢复机制,掌握SQLServer中数据库备份和恢复的方法。
二、实验内容:
1.备份数据库:
操作步骤:
(1)选中所要备份的数据库
(2)点击菜单工具栏上“操作”选项
(3)在弹出的菜单中选中“所有任务”
(4)在“所有任务”一栏中选中“备份数据库”
单出如图5-1所示的
图5-1
(5)在数据库(B)中选中要备份的数据库,更改备份名称,点击添加按钮
单出如图5-2所示:
图5-2
(6)选择备份操作要使用的文件名或备份设备,单击“确定”按钮
(7)回到SQLSERVER备份界面,单击“确定”。
2.还原数据库:
操作步骤:
(1)新建一个数据库名和还原数据库名称相同
(2)点击菜单工具栏上“操作”选项
(3)在弹出的菜单中选中“所有任务”
(4)在“所有任务”一栏中选中“还原数据库”
单出如图5-3所示的
图5-3
(5)从还原数据库的界面,选中需要“还原为数据库”名称,选中“从设备”,点击“选择设备”,弹出如图5-4所示:
图5-4
(6)单击“添加(A)”,弹出如图5-5所示:
图5-5
(7)输入需要的备份文件,单击“确定”。
3.数据的导出:
操作步骤:
(1)选中所要导出的数据库
(2)点击菜单工具栏上“操作”选项
(3)在弹出的菜单中选中“所有任务”
(4)在“所有任务”一栏中选中“导出数据”,弹出如图5-6所示:
图5-6
(5)单击“下一步”,弹出如图5-7所示:
图5-7
(6)选中“数据源(D)、服务器、数据库(B)名称,点击“下一步”,弹出如下图所示(图5-8):
图5-8
(7)选择“目的(T)”、服务器、“数据库(D)”(可以新建),单击“下一步”
(8)选择数据库中所要导出的数据,单击“确定”
4.数据的导入:
操作步骤:
(和数据的导出相似,省略)
实验六数据完整性和数据安全性
一、实验目的:
通过实验使学生加深对数据安全性和完整性的理解,并掌握SQLServer中有关用户、角色及操作权限的管理方法,学会创建和使用规则、缺省。
二、实验内容:
1.使用SQL对数据进行安全性控制,包括:
授权和权利回收,语法格式如下:
GRANT<系统特权组>To<用户组>|PUBLIC
PUBLIC指数据库的所有用户。
2.使用SQL对数据进行完整性控制(三类完整性,HECK短语,CONSTRAINT子句,触发器)。
用实验证实,当操作违反了完整性约束条件时,系统是如何处理的,法格式如下:
REVOKE<权限组>|ALLPRIVILEGES[ON<对象名>]
FROM<用户组名>|PUBLIC
ON用于被回收特权的对象,ALLPRIVILEGES指回收所有特权,PUBLIC指数据库的所有用户。
三、实验任务:
1.为了完成数据库数据的完整性,利用SQLServer2000的查询分析器,在实验一所建立的数据库Student中建立三张表,分别为Student1,Course1,Sc1;
所建表的SQL命令:
(1).CREATETABLEStudent
(SnoCHAR(9)PRIMARYKEY,
SnameCHAR(20)NOTNULL,
SsexCHAR
(2),
SdeptCHAR(20)
);
(2).CREATETABLECourse
(CnoCHAR(4)PRIMARYKEY,
CnameCHAR(40),
CpnoCHAR(4),
CcreditSMALLINT,
FOREIGNKEYCpnoREFERENCESCourse(Cno)
);
(3).CREATETABLESC
(SnoCHAR(9),
CnoCHAR(4),
GradeSMALLINT,
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno)
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
};
2.把查询Student表的权限授给用户U1
3.把对Student表和Course表的全部操作权限授予用户U2和U3
4.把对表SC的查询权限授予所有用户
5.把查询Student表和修改学生学号的权限授给用户U4
6.把对表SC的INSERT权限授予U5用户,并允许将此权限再授序其他用户
7.把用户U4修改学生学号的权限收回
8.收回所有用户对表SC的查询权限
9.把用户U5对SC表的INSERT权限收回
10.
(1)创建一个角色R1
(2)然后使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限
(3)将这个角色授予王平,张明。
使他们具有R1所包含的全部权限
实验七存储过程和触发器
一、实验目的:
通过实验使学生掌握SQLServer中建立存储过程和触发器的方法。
二、实验内容:
启动数据库服务软件SQLServer2000的查询分析器,在RDMBS中建立一个数据库,进行实验所要求的各种操作,所有的SQL操作均在此建立的新库里进行。
1.CREATEPROCEDURE创建存储过程
2.CREATETRIGGER创建触发器
3.DROPTRIGGER删除触发器
三、实验任务:
1.定义存储过程
Createprocedure[owner].[存储过程名]
As子查询
2.定义触发器
Createtrigger<触发器名>
{before|after}<触发事件>on<表名>
Foreach{Row|Statement}
[when<触发条件>]
<触发动作体>
[例1]定义一个before行级触发器,为教师表Teacher定义完整性规则教授的工资不得低于4000元,如果低于4000元,自动改为4000元.
Createtriggerinsert_or_update_sal
Beforeinsertorupdateonteacher
Foreachrow
Asbegin
If(new.job=’教授’)and(new.sal<4000)Thennew.sal:
=4000;
Endif;
End;
[例2]定义After行级触发器,当教师表Teacher的工资发生变化后就自动在工资变化表sal_log中增加一条相应记录.
CreateTablesal_log
(EnoNUMERIC(4)REFERENCESteacher(Eno),
SalNUMERIC(7,2),
Usernamechar(10),
DateTimeTIMESTAMP
);
Createtriggerinsert_sal
Afterinsertonteacher
Foreachrow
Asbegin
Insertintosal_logvalues(
New.Eno,new.sal,current_user,current_timestamp);
End;
Createtriggerupdate_sal
Afterupdateonteacher
Foreachrow
Asbegin
If(new.sal<>old.sal)theninsertintosal_logvalues(
New.Eno,new.sal,current_user,current_timestamp);
Endif;
End;