数据库原理实验指导书wjb.docx
- 文档编号:12144351
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:33
- 大小:251.77KB
数据库原理实验指导书wjb.docx
《数据库原理实验指导书wjb.docx》由会员分享,可在线阅读,更多相关《数据库原理实验指导书wjb.docx(33页珍藏版)》请在冰点文库上搜索。
数据库原理实验指导书wjb
《数据库原理》实验指导书
实验一数据描述、定义实验1
实验二数据更新实验3
实验三数据查询实验6
实验四视图的定义、使用实验8
实验五索引、存储过程10
实验六数据完整性实验17
实验七数据库设计工具的使用21
实验八数据库设计22
实验一数据描述、定义实验
一、学时
4学时
二、实验类型
演示、设计
三、实验目的
熟悉和掌握数据库的创建和连接方法;
熟悉和掌握数据表的建立、修改和删除;
加深对表的实体完整性、参照完整性和用户自定义完整性的理解。
四、需用仪器、设备
486及以上微机;
Windows95/97/98操作系统;
安装了SQLSERVER
五、实验准备
1. 熟悉SQLSERVER工作环境;
2. 复习有关表的建立、修改和删除的SQL语言命令;
六、实验方法及步骤
1. 介绍有关SQLSERVER的图形界面工作环境;
2. 创建数据库或连接已建立的数据库
3. 在当前数据库上建立新表
4. 定义表的结构
A:
用SQL命令形式
B:
用SQLSERVER提供的企业管理器以交互方式进行
5. 进一步定义表的主码,外码及在表上建立索引。
6. 将以上表的定义以 .SQL文件的形式保存在磁盘上。
7. 修改表的结构
8. 删除表的定义
七、实验内容
背景材料:
在以下实验中,使用学生-课程数据库,它描述了学生的基本信息、课程的基本信息及学生选修课程的信息。
1. 创建学生-课程数据库
2. 创建学生关系表S:
学号
姓名
性别
年龄
所在系
Sno
Sname
Ssex
Sage
sdept
3. 创建课程关系表C:
课程号
课程名
先行课
学分
Cno
Cname
Cpno
ccredit
4. 创建课程关系表SC:
学号
课程号
成绩
Sno
Cno
grade
5. 将以上创建表S、C、SC的SQL命令以.SQL文件的形式保存在磁盘上。
6. 在表S上增加“出生日期”属性列。
7. 删除表S的“年龄”属性列。
8. 在表S上,按“Sno”属性列的唯一值方式建立索引。
9. 在表SC上,按“grade”属性列的多值方式建立索引。
10. 删除表SC,利用磁盘上保存的.SQL文件重新创建表SC。
11. 选做:
创建教材P74-75--习题5、SPJ数据库中的四个关系S,P,J,SPJ。
八、实验思考
1、 定义表结构是对数据模型的那个要素进行描述,对主属性有什么要求?
2、 修改表结构时,能否修改已定义属性的参数?
新增加的属性列能否定义为非空?
为什么?
3、 分别在表S、SC上按“sno”列的唯一值方式建立索引,可能出现问题吗?
情况有什么区别?
4、 能否在非主属性列上建立索引?
其恰当的方式是什么?
九、问题
1、 在表的定义中,如何确定属性是NOTNULL/NULL?
(主码,关键字,主属性/主属性)
2、 能否将S,C,SC表单独以一个数据文件的形式保存在磁盘上?
3、 在表S的“SNO”,“SNAME”属性上分别按唯一值方式建立索引和在S的“SNO”,“SNAME”上唯一值方式建立联合索引有无区别?
4、 要修改主属性的定义,正确的方式是什么?
实验二数据更新实验
一、学时
2学时
二、实验类型
综合、设计
三、实验目的
熟悉和掌握数据表中数据的插入、修改、删除操作和命令的使用;
加深理解表的定义对数据更新的作用
四、需用仪器、设备
486及以上微机;
Windows95/97/98操作系统;
安装了SQLSERVER
五、实验准备
1.熟悉SQLSERVER工作环境;
2. 连接到学生-课程数据库
3. 复习对表中数据的插入、修改和删除的SQL语言命令;
六、实验方法及步骤
1. 将数据插入当前数据库的表S、C、SC中;
A:
用SQL命令形式
B:
用SQLSERVER提供的企业管理器以交互方式进行
2. 将以上插入的数据分别以.SQL文件和.txt文件的形式保存在磁盘上;
3. 修改表S、C、SC中的数据;
A:
用SQL命令形式
B:
用SQLSERVER提供的企业管理器以交互方式进行
4. 删除表S、C、SC中的数据。
A:
用SQL命令形式
B:
用SQLSERVER提供的企业管理器以交互方式进行
七、实验内容
1. 将数据分别插入表S、C、SC;
2. 将表S、C、SC中的数据分别以.SQL文件和.txt文件的形式保存在磁盘上。
3. 在表S、C、SC上练习数据的插入、修改、删除操作。
(比较在表上定义/未定义主码(PrimaryKey)或外码(ForeignKey)时的情况)
4. 将表S、C、SC中的数据全部删除,再利用磁盘上备份的数据来恢复数据。
5. 如果要在表SC中插入某个学生的选课信息(如:
学号为“200215121”,课程号为“c123”,成绩待定),应如何进行?
6. 求各系学生的平均成绩,并把结果存入数据库;
7. 将“CS”系全体学生的成绩置零;
8. 删除“CS”系全体学生的选课记录;
9. 删除学号为“S1”的相关信息;
10. 将学号为“S1”的学生的学号修改为“S001”;
11. 把平均成绩大于80分的男同学的学号和平均成绩存入另一个表S——GRADE(SNO,AVG——GRADE);
12. 把选修了课程名为“数据结构”的学生的成绩提高10%;
13. 把选修了“C2”号课程,且成绩低于该门课程的平均成绩的学生的成绩提高5%;
14. 把选修了“C2”号课程,且成绩低于该门课程的平均成绩的学生成绩删除掉;
15. 选做:
将数据插入SPJ数据库中的四个表S,P,J,SPJ中,并以.SQL文件和.txt文件的形式保存在磁盘上。
八、实验思考
1.使用SQL的更新语句时,一次可以对几个表进行更新。
2.在进行数据更新时,可能产生破坏数据完整性的情况,因此,在数据更新(尤其是多表更新)时,应注意什么问题。
3.比较表中定义/未定义主码(PrimaryKey)时,对表S的更新操作有何异同。
4.比较在表之间定义/未定义外码(ForeignKey)时,对表S的更新操作有何异同。
5.若要修改已定义表的属性或删除已定义表的某一属性列,应如何进行?
九、问题
1.在表上未定义主码时,数据更新的情况?
2.如果在表S和SC表上建立了外码联系时,要删除学号为‘S2’的学生记录,应如何进行?
如果在表S和SC表上未建立外码联系,情况会是怎样的?
DELETEFROM"s"
WHERE"s"."sno"='s2';
DELETEFROM"sc"
WHERE"sc"."sno"='s2';
DELETEFROM"sc"
WHERE"sc"."sno"='s2';
DELETEFROM"s"
WHERE"s"."sno"='s2';
实验三数据查询实验
一、学时
6学时
二、实验类型
综合
三、实验目的
熟悉和掌握对数据表中数据的查询操作和SQL命令的使用,学会灵活熟练的使用SQL语句的各种形式;
加深理解关系运算的各种操作(尤其的关系的选择,投影,连接和除运算)
四、需用仪器、设备
486及以上微机;
Windows95/97/98操作系统;
安装了SQLSERVER。
五、实验准备
1.熟悉SQLSERVER工作环境;
2.连接到学生-课程数据库
3.复习对表中数据查询的SQL语言命令;
六、实验方法及步骤
1.在表S、C、SC上进行简单查询;
2.在表S、C、SC上进行连接查询;
3.在表S、C、SC上进行嵌套查询;
4.使用聚合函数的查询;
5.对数据的分组查询;
6.对数据的排序查询。
七、实验内容
在表S,C,SC上完成以下查询:
1. 查询学生的基本信息;
2. 查询“CS”系学生的基本信息;
3. 查询“CS”系学生年龄不在19到21之间的学生的学号、姓名;
4. 找出最大年龄;
5. 找出“CS”系年龄最大的学生,显示其学号、姓名;
6. 找出各系年龄最大的学生,显示其学号、姓名;
7. 统计“CS”系学生的人数;
8. 统计各系学生的人数,结果按升序排列;
9. 按系统计各系学生的平均年龄,结果按降序排列;
10. 查询每门课程的课程名;
11. 查询无先修课的课程的课程名和学时数;
12. 统计无先修课的课程的学时总数;
13. 统计每位学生选修课程的门数、学分及其平均成绩;
14. 统计选修每门课程的学生人数及各门课程的平均成绩;
15. 找出平均成绩在85分以上的学生,结果按系分组,并按平均成绩的升序排列;
16. 查询选修了“1”或“2”号课程的学生学号和姓名;
17. 查询选修了“1”和“2”号课程的学生学号和姓名;
18. 查询选修了课程名为“数据库系统”且成绩在60分以下的学生的学号、姓名和成绩;
19. 查询每位学生选修了课程的学生信息(显示:
学号,姓名,课程号,课程名,成绩);
20. 查询没有选修课程的学生的基本信息;
21. 查询选修了3门以上课程的学生学号;
22. 查询选修课程成绩至少有一门在80分以上的学生学号;
23. 查询选修课程成绩均在80分以上的学生学号;
24. 查询选修课程平均成绩在80分以上的学生学号;
25. 选做:
针对SPJ数据库中的四个表S,P,J,SPJ,完成教材P74-75--习题5中的查询及教材P127--习题5中的查询。
实验四视图的定义、使用实验
一、学时
2学时
二、实验类型
综合、设计
三、实验目的
熟悉和掌握对数据表中视图的定义操作和SQL命令的使用;
熟悉和掌握对数据表中视图的查询操作和SQL命令的使用;
熟悉和掌握对数据表中视图的更新操作和SQL命令的使用,并注意视图更新与基本表更新的区别与联系;
学习灵活熟练的进行视图的操作,认识视图的作用;
四、需用仪器、设备
486及以上微机;
Windows95/97/98操作系统;
安装了SQLSERVER。
五、实验准备
1.熟悉SQLSERVER工作环境;
2.连接到学生-课程数据库
3.复习有关视图操作的SQL语言命令;
六、实验方法及步骤
1. 视图的定义
2. 视图的查询
3. 视图的修改
七、实验内容
以S,C,SC表为基础完成以下视图定义及使用
1. 定义“IS”系学生基本情况视图V_IS并查询结果;
2. 将S,C,SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G并查询结果;
3. 将各系学生人数,平均年龄定义为视图V_NUM_AVG并查询结果;
4. 定义一个反映学生出生年份的视图V_YEAR并查询结果;
5. 将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G并查询结果;
6. 将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G并查询结果;
7. 查询平均成绩为90分以上的学生学号、姓名和成绩;
8. 查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩;
9. 按系统计各系平均成绩在80分以上的人数,结果按降序排列;
10. 通过视图V_IS,分别将学号为“S1”和“S4”的学生姓名更改为“S1_MMM”,”S4_MMM”并查询结果;
11. 通过视图V_IS,新增加一个学生记录('S12','YANXI',19,'IS'),并查询结果;
12. 通过视图V_IS,新增加一个学生记录('S13','YANXI',19,'MA'),并查询结果;
13. 通过视图V_IS,删除学号为“S12”和“S3”的学生信息,并查询结果;
14. 要通过视图V_S_C_G,将学号为“S12”的姓名改为“S12_MMM”,是否可以实现?
15. 要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?
八、实验思考
1.在定义视图的子查询中,是否可以使用SQL查询语句的任意子句及短语?
需要注意什么?
2.视图一经定义后,就可以象基本表一样用于查询,但DBMS执行对视图的查询过程与执行基本表的查询过程有什么区别?
3.通过视图是否能更新数据?
通常那些视图可以进行更新?
4.使用视图有什么好处?
5.SQL语言提供了那些方式可以实现对数据的安全保护功能?
实验五索引、存储过程
一、实验大纲
实验目的:
1.熟悉索引、存储过程的概念
2.熟练掌握索引和存储过程的操作方法
实验要求:
1.为职工表employee创建唯一索引取名为ix_name,要求姓名不能完全相同。
2.使用唯一聚集索引ix_id,为salary表的eno列创建索引,并强调唯一性。
3.删除索引ix_name。
4.利用存储过程,给employee表添加一条财务科员工的信息。
5.利用存储过程从employee、salary、dept表的连接中返回所有职工的姓名、科室、基本工资。
6.利用存储过程查找“刘刚”的员工编号、所在科室。
7.利用存储过程查找姓“李”的员工的员工编号、科室名称、基本工资。
8.删除以上建立的所有存储过程
实验环境:
SQLServer2000
二、实验指导
说明:
本示例用例的表结构如下所示:
Student(sno,sname,sex,sage,dept,oldgrade,advisor)
Teacher(tno,tname,dept,salary,title)
Course(cno,cname,descry,dept,credit)
SC(sno,cno,grade)
以上数据库表的含义为:
Student—学生:
sno(学号),sname(学生姓名),sex(性别),sage(年龄),dept(系),oldgrade(高考成绩),advisor(导师)
Teacher—教师:
tno(教师编号),tname(教师姓名),dept(所在系),salary(工资),title(职称)
Course—课程:
cno(课程号),cname(课程名),descry(课程说明),dept(开课系),credits(学分)
SC—成绩:
sno(学号),cno(课程号),grade(成绩)
1.利用企业管理器创建和删除索引
(1)创建索引
在数据库关系图中选择要创建索引的表,右击该表,然后从快捷菜单中选择“索引/键”命令。
或为要创建索引的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择“索
图1图2
引/键”命令。
或在工具栏中选择
,弹出对话框如图1所示。
选择“新建”命令。
“选定的索引”框显示系统分配给新索引的名称。
如图2所示。
在“列名”下选择要创建索引的列。
可以选择多达16列。
为获得最佳性能,最好只选择一列或两列。
对所选的每一列,可指出索引是按升序还是降序组织列值。
为索引指定任何其它需要的设置,然后单击“确定”按钮。
当保存表或关系图时,索引即创建在数据库中。
(2)删除索引
在数据库关系图中选择要删除索引的表,右击该表,然后从快捷菜单中选择“属性”命令。
或为要删除索引的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"属性"命令。
选择“索引/键”选项卡。
从“选定的索引”列表中选择要删除的索引。
选择“删除”按钮。
注意:
选择“删除”按钮将导致一个无法撤消的操作,而且不保存对数据库关系图所做的所有其它更改。
若要撤消该操作,请不保存更改即关闭当前的数据库关系图和所有其它打开的数据库关系图以及表设计器窗口。
当保存表或关系图时,索引即从数据库中被删除。
利用向导创建和删除索引
(1)创建索引
展开一个服务器组,再展开要在其中创建视图的服务器。
展开“数据库”文件夹。
选择需要建立索引的表,在工具栏上单击“运行向导”
命令。
弹出如图3所示向导界面。
选择“创建索引向导”,“确定”进入创建索引欢迎界面如图4所示。
图3图4
单击“下一步”进入选择表或视图界面,为索引选择对象如图5所示。
选择数据库student中的course表。
图5图6
单击“下一步”进入显示当前索引信息界面,如图6所示。
图7图8
单击“下一步”进入选择列界面如图7所示。
在相应列的□中选择是否包含在索引中。
单击“下一步”进入指定索引选项界面,如图8,为索引选择相应的属性。
若要建立唯一索引,则选中“使其成为唯一索引”选项。
单击“下一步”进入索引创建正在完成界面,如图9所示。
单击“完成”,进入向导完成界面,提示创建索引成功,如图10所示。
图9图10
(2)删除索引
打开已经创建索引表设计器,在表设计器中右击,然后从快捷菜单中选择“索引/键”命令。
或在工具栏中选择
,弹出对话框删除对话框。
选择要删除的索引,单击“删除”按钮即可。
3.存储过程
(1)利用企业管理器创建存储过程
展开服务器组,然后展开服务器。
展开“数据库”文件夹,再展开要在其中创建过程的数据库。
右击“存储过程”,然后单击“新建存储过程”命令。
或者,单击“存储过程”,选择菜单“操作”,然后单击“新建存储过程”,如图11所示。
然后弹出新建存储过程对话框如图12所示。
图11图12
输入存储过程的文本。
按TAB键可以缩进存储过程的文本。
按下CTRL+TAB键或单击合适的按钮来退出文本框。
若要检查语法,单击“检查语法”命令。
若要设置权限,单击“权限”命令。
(2)用创建存储过程向导创建存储过程
展开一个服务器组,再展开要在其中创建视图的服务器。
在工具栏上单击“运行向导”
命令。
展开“数据库”文件夹,如图13所示。
图13
选择“创建存储过程向导”命令。
单击“确定”按钮。
按提示完成向导中的步骤。
4.利用T-SQL语言创建、删除索引和存储过程
(1)创建索引
创建索引的语法结构:
语法
CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEXindex_name
ON{table|view}(column[ASC|DESC][,...n])
[WITH
[ONfilegroup]
:
=
{PAD_INDEX|
FILLFACTOR=fillfactor|
IGNORE_DUP_KEY|
DROP_EXISTING|
STATISTICS_NORECOMPUTE|
SORT_IN_TEMPDB
}
参数说明:
UNIQUE:
为表或视图创建唯一索引(不允许存在索引值相同的两行)。
视图上的聚集索引必须是UNIQUE索引。
CLUSTERED:
创建一个对象,其中行的物理排序与索引排序相同,并且聚集索引的最低一级(叶级)包含实际的数据行。
一个表或视图只允许同时有一个聚集索引。
具有聚集索引的视图称为索引视图。
必须先为视图创建唯一聚集索引,然后才能为该视图定义其它索引。
在创建任何非聚集索引之前创建聚集索引。
创建聚集索引时重建表上现有的非聚集索引。
如果没有指定CLUSTERED,则创建非聚集索引。
NONCLUSTERED:
创建一个指定表的逻辑排序的对象。
对于非聚集索引,行的物理排序独立于索引排序。
非聚集索引的叶级包含索引行。
每个索引行均包含非聚集键值和一个或多个行定位器(指向包含该值的行)。
如果表没有聚集索引,行定位器就是行的磁盘地址。
如果表有聚集索引,行定位器就是该行的聚集索引键。
其他参数说明祥见SQLServer联机丛书。
(2)删除索引
从当前数据库中删除一个或多个索引。
DROPINDEX语句不适用于通过定义PRIMARYKEY或UNIQUE约束创建的索引(通过分别使用CREATETABLE或ALTERTABLE语句的PRIMARYKEY或UNIQUE选项创建)。
删除索引的语法结构:
DROPINDEX'table.index|view.index'[,...n]
参数说明:
table|view:
是索引列所在的表或索引视图。
若要查看在表或视图上存在的索引列表,请使用sp_helpindex并指定表名或视图名称。
表名和视图名称必须符合标识符规则。
有关更多信息,请参见使用标识符。
可以选择是否指定表或视图所有者名称。
index:
是要除去的索引名称。
索引名必须符合标识符的规则。
n:
是表示可以指定多个索引的占位符。
[例1]创建唯一索引。
CREATETABLEstudent_temp
(
snointNOTNULL,
snamechar(10),
oldgradeint
);
CREATEUNIQUECLUSTEREDINDEXIX_sid
ONstudent_temp(sno);
CREATEUNIQUEINDEXIX_sname
WITH
PAD_INDEX,
FILLFACTOR=80,
IGNORE_DUP_KEY
ONstudent_temp(sname);
EXECsp_helpindexstudent_temp;
[例2]创建简单索引。
SETNOCOUNTOFF
USEstudent
IFEXISTS(SELECTnameFROMsysindexes
WHEREname='ix_sno')
DROPINDEXstudent.ix_sno
GO
USEstudent
CREATEINDEXix_sno
ONstudent(sno)
GO
[例3]使用唯一聚集索引。
该例为teacher表的tno列创建索引,并且强制唯一性。
因为指定了CLUSTERED子句,所以该索引将对磁盘上的数据进行物理排序。
SETNOCOUNTON
USEstudent
IFEXISTS(SELECT*FROMINFORMATION_SCHEMA.TABLES
WHERETABLE_NAME='teacher')
DROPTABLEteacher
GO
USEstudent
IFEXISTS(SELECTnameFROMsysindexes
WHEREname='ix_tno')
DROPINDEXteacher.ix_tno
GO
USEstudent
GO
CREATETABLEteacher
(
tnointNOTNULL,
base_paymoneyNOTNULL,
commissiondeci
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 实验 指导书 wjb