版《数据库原理实验》指导书.docx
- 文档编号:23290021
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:23
- 大小:42.67KB
版《数据库原理实验》指导书.docx
《版《数据库原理实验》指导书.docx》由会员分享,可在线阅读,更多相关《版《数据库原理实验》指导书.docx(23页珍藏版)》请在冰豆网上搜索。
版《数据库原理实验》指导书
《数据库原理实验》指导书
计算机与通信工程学院
2010年7月
目录
前言1
实验一数据库查询2
实验二数据更新5
实验三视图和索引6
实验四数据库保护8
实验五T-SQL编程10
实验六存储过程编程11
实验七触发器编程12
实验八JDBC编程*13
实验九事务与死锁*14
实验名称
学时
上课时间
1
实验1数据库查询
4
6
2
实验2数据更新实验
2
7
3
实验3索引和视图
2
4
实验4数据库保护
4
8
5
实验5T-SQL编程
4
10
6
实验6存储过程
4
11
7
实验7触发器
4
9
8
实验8JDBC编程
4
12
9
实验9事务处理
4
13
前言
(一)本课程的教学目的和要求:
SQL语言是关系数据库的标准语言,是本课程的一个重点。
通过上机实验,可以使学生加深对课堂讲授内容的理解,循序渐进地掌握SQL语言的使用;同时,使学生了解和熟悉SQLSERVER2000开发的环境,逐步掌握编辑、调试、运行程序的方法,初步积累编程经验。
(二)实验步骤:
1.准备好上机所需的程序。
手编程序应书写整齐,并经人工检查无误后才能上机,以提高上机效率。
对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意。
2.上机输入和调试自己所编的程序。
一人一组,独立上机,上机过程中出现的问题,除了是系统的问题以外,一般应自己独立处理。
3.上机结束后,整理出实验报告,实验报告应包括以下内容:
1)题目;
2)程序清单(加注释);
3)运行结果;
4)对运行情况所作的分析
5)本次调试程序取得的经验。
(三)教学重点与难点:
1.数据库及表的建立与使用
2.简单查询
3.连接查询
4.嵌套查询
5.数据库更新
6.视图的定义和查询
7.安全性控制
8.事务的建立和使用
9.存储过程的使用
10.触发器的使用
11.数据转换
实验一数据库查询
课程名称:
数据库原理实验
实验类型:
验证型
实验名称
数据库查询
学时
4学时
实验目的:
使学生掌握SQLServerQueryAnalyzer的使用方法,加深对SQL和T-SQL语言的查询语句的理解。
熟练掌握表的基本查询,连接查询和嵌套查询,以及掌握数据排序和数据分组的操作方法。
实验原理:
SELECT[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]…
FROM<表名或视图名>[,<表名或视图名>]…
[WHERE<条件表达式>]
[GROUPBY<列名1>[HAVING<条件表达式>]]
[orderby<列名2>[ASC|DESC]];
实验方法:
将查询需求用T-SQL语言表示;在SQLServerQueryAnalyzer的输入区中输入T-SQL查询语句;设置QueryAnalyzer的结果区为StandardExecute(标准执行)或ExecutetoGrid(网格执行)方式;发布执行命令,并在结果区中查看查询结果;如果结果不正确,要进行修改,直到正确为止。
实验内容:
1.分别用带DISTINCT和不带DISTINCT关键字的SELELCT在student中进行查询.
2.查询teacher表中各教师的姓名、教工号及工资按95%发放的信息,并将工资按95%发放后的列名改为‘预发工资’
3.查询选修了2学分以上的课程,并且笔试成绩不及格的学生的信息,只需给出学号、课程号和笔试成绩。
4.查询学分在4~8之间的课程信息.(用between..and和复合条件分别实现)
5.从sc表中查询出学生“g9940202”,“g9940204”选择的课程号、学生号以及笔试成绩,并按笔试成绩降序排列(用in实现)
6.从teacher表中分别检索出姓王的教师的资料,或者姓名的第2个字是远或辉的教师的资料
7.查询每个学生及其选修课情况
8.以student表为主体列出每个学生的基本情况及其选课情况,如果学生没有选课,只输出其基本情况(提示:
使用外连接)
9.查询选修dep04_s001号课程且笔试成绩在80分以上的学生信息。
(分别用连接,in和exists实现)
10.查询所有上“计算机基础”课程的学生的学号、选修课程号以及分数(分别用连接,in和exists实现)
11.查询所有“计算机科学与技术”专业学生的学号、选修课程号以及分数(分别用连接,in和exists实现)
12.查询每个dep_04系学生的总成绩、平均成绩,仅显示平均成绩及格的学生的记录。
(提示使用ISNULL函数,用法见附录2)
13.查询“数据库开发技术”的平均成绩
14.按职称查询教师的平均工资,并按总工资降序排列
15.将笔试成绩转换成A、B、C、D和E五分制显示。
(提示使用CASE函数)
附录1:
教务管理数据库jwgl结构
student表结构
列名称
数据类型
长度
允许空值
说明
Student_id
Char
8
否
学生学号
Student_name
Varchar
8
否
学生姓名
Sex
Bit
1
否
性别
Age
Int
4
否
年龄
Class_id
Char
6
否
班级号
Department_id
Char
6
否
系编号
Address
varchar
50
否
家庭住址
Course表
字段名称
数据类型
长度
允许空
说明
Course_id
Char
10
否
课程号
Course_name
Varchar
20
否
课程名称
Book_id
Char
15
否
书标识
credit
Tinyint
否
学分
Total_period
Tinyint
否
总学时
Week_period
Tinyint
否
周学时
SC表
字段名称
数据类型
长度
允许空
说明
Course_id
Char
10
否
课程号
Student_id
Varchar
8
否
学生号
WrittenScore
Tinyint
否
笔试成绩
LabScore
Tinyint
否
实验成绩
Teacher表
字段名称
数据类型
长度
允许空
说明
Teacher_id
Char
9
否
教师编号
Teacher_name
nvarchar
8
否
教师姓名
Department_id
Char
6
否
所在系号
Profession
Nvarchar
16
职称
Sex
Bit
否
性别
phone
Nvarchar
15
是
电话
adress
Nchar
40
是
住址
Salary
Numeric
7.2
是
工资
Birth
Smalldatetime
否
出生日期
Postalcode
Numeric
6,0
是
邮编
Book表
字段名称
数据类型
长度
允许空
说明
Book_id
Char
13
否
书号
Book_name
Varchar
30
否
书名
Publish_company
Varchar
50
否
出版社
Author
nvarchar
8
是
作者
Price
Numeric
5.2
是
价格
Class表
字段名称
数据类型
长度
允许空
说明
Class_id
Char
6
否
班级号
Monitor
Varchar
8
是
班主任姓名
Class_course表
字段名称
数据类型
长度
允许空
说明
Class_id
Char
6
否
班级号
Course_id
char
10
否
课程号
Department表
字段名称
数据类型
长度
允许空
说明
Department_id
Char
6
否
系编号
Department_name
nvarchar
20
否
系名称
附录2:
ISNULL函数
⏹作用:
使用指定的替换值替换NULL
语法:
ISNULL(check_expression,replacement_value)
⏹参数:
1.check_expression将被检查是否为NULL的表达式。
check_expression可以为任何类型。
2.replacement_value当check_expression为NULL时要返回的表达式。
replacement_value必须是可以隐式转换为check_expresssion类型的类型。
⏹返回类型:
返回与check_expression相同的类型。
如果文字NULL作为check_expression提供,则返回replacement_value的数据类型。
如果文字NULL作为check_expression提供并且未提供replacement_value,则返回int。
实验二数据更新
课程名称:
数据库原理
实验类型:
验证型
实验名称
数据更新
学时
2学时
一.实验目的和要求:
掌握用SQL语句实现数据的插入、修改和删除。
二.实验内容:
1.将一个新学生记录(student_id:
g9940305、student_name:
张红、sex:
女、birth:
1985-02-08、class_id:
g99403,department_id:
Dep_01,home_addr:
沈阳皇浦区34号)插入到student表中
2.对每一个班,求学生的平均年龄,并把结果存入数据库。
(提示:
先建立新表“age_avg”,其中一列存放班级,另一列存放相应的学生平均年龄,然后将所需数据存入age_avg)
3.将学号为g9940201的学生的姓名改为张宏,年龄改为18
4.student表中的所有系别(department_id)均改为“dep_03”
5.将班级号(class_id)为g99402的全体学生的笔试成绩加10分
6.删除所有选修了课程号(course_id)为dep04_b001的学生
三.实验报告:
1.实验各项内容实现的过程。
2.实验结果分析。
实验三视图和索引
课程名称:
数据库原理
实验类型:
验证型
实验名称
视图和索引
学时
2学时
实验目的:
(1)掌握视图的定义、查询和更新;
(2)掌握索引的定义;
(3)掌握利用索引优化查询效率;
实验原理:
1.视图
⏹定义视图
CREATEVIEW<视图名>[(<列名>[,<列名>]…)]
AS<子查询>
[WITHCHECKOPTION];
⏹删除视图
DROPVIEW<视图名>
2.索引(注意:
索引不能修改)
⏹定义索引
CREATE[UNIQUE][CLUSTER]INDEX<索引名>
ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…);
⏹删除索引
DROPINDEX<索引名>
实验方法:
将查询需求用T-SQL语言表示;在SQLServerQueryAnalyzer的输入区中输入T-SQL查询语句;设置QueryAnalyzer的结果区为StandardExecute(标准执行)或ExecutetoGrid(网格执行)方式;发布执行命令,并在结果区中查看查询结果;如果结果不正确,要进行修改,直到正确为止。
实验内容:
在实验1中用到的教务管理数据库jwgl中完成如下问题:
(1)创建一个名为stud_query_viewl的视图,从数据库JWGL的student表中查询出性别为“男”的所有学生的资料;
(2)创建一个名为stud_query_view2的视图,从数据库JWGL的student表中查询出性别为“男”的所有学生的学号,姓名,性别,班级,家庭住址,年龄;
(3)创建一个名为“stud_query__view3”的视图,它是由表course、book及class_course创建的一个显示“g99402”班所开课程的课程名、所用教材的教材名、出版社及作者的视图;
(4)创建一个从视图stud_query_viewl中查询出班级名为g99402的所有学生的信息;
(5)从视图stud_query_view2中查询出班级为“g99402”、姓名为“张华”的信息;
(6)向视图stud_query_View2中插入一行数据。
学号:
g9940209,姓名:
赵青,班级:
g99402,性别:
男,家庭住址:
南京中山北路10号,年龄17岁;
(7)修改视图stud_query_view2中的数据。
将stud_query_view2中姓名为“林红”的家庭地址改为“扬州市南京路8号”;
(8)从视图中stud_query_view2将姓名为“林红”的同学删除;
(9)为表teacher创建一个索引名为teacher_index的惟一性非聚簇索引,索引关键字为teacher_id,升序;
(10)为表class_course上创建一个名为class_course_index的非聚簇复合索引,索引关键字为class_id,course_id,升序
(11)假设第(6)小题在插入赵青信息时,希望将赵青所在系“dep_03”也同时插入到数据表中,该如何处理。
本题目留作思考题,可自行查找资料完成。
实验报告:
1.实验各项内容实现的过程。
2.实验结果分析。
实验四数据库保护
课程名称:
数据库原理
实验类型:
设计型
实验名称
数据库保护
学时
4学时
实验目的:
(1)使学生掌握E_R图的设计方法,并能将E_R图转换成关系模式;
(2)熟悉SQLDDL和DML语言,能够完成基本的表结构的定义、修改;
(3)掌握数据库完整性约束定义
(4)掌握数据库安全授权
实验原理:
1.将E_R图转换为关系的方法:
⏹一个实体转换为一个关系模式,实体的属性就是关系的属性,实体的码就是关系的码
⏹一个1:
1联系可以转换为一个独立的关系模式,也可以与任意对应的关系模式合并
⏹一个1:
n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并
⏹一个m:
n联系转换为一个关系模式
⏹三个或三个以上实体间的一个多元联系可以转换为一个关系模式
2.定义库:
CreateDATABASE<数据库名>
3.表
⏹定义表
CREATETABLE<表名>(<列名><数据类型>[列级完整性约束]
[,<列名><数据类型>[列级完整性约束]][,<表级完整性约束>]);
⏹添加列
ALTERTABLE<表名>ADD<列名><类型>[列级完整性约束]
⏹修改列
ALTERTABLE<表名>ALTERCOLUMN<列名><类型>[列级完整性约束]
⏹删除列
ALTERTABLE<表名>DROPCOLUMN<列名>
4.安全授权
⏹创建登录名
CREATELOGIN<登录名>WITHPASSWORD=<密码>
⏹为当前数据库创建用户
CREATEUSER<用户名>FORLOGIN<登录名>
⏹授权
GRANT<权限>[,<权限>]…
[ON<对象名>]
TO<用户>[,<用户>]…
[WITHGRANTOPTION];
⏹回收权限
REVOKE<权限>[,<权限>]…
[ON<对象名>]
FROM<用户>[,<用户>]…
[CASCADE];
实验方法:
将查询需求用T-SQL语言表示;在SQLServerQueryAnalyzer的输入区中输入T-SQL查询语句;设置QueryAnalyzer的结果区为StandardExecute(标准执行)或ExecutetoGrid(网格执行)方式;发布执行命令,并在结果区中查看查询结果;如果结果不正确,要进行修改,直到正确为止。
实验内容:
假设某公司的业务规则如下:
(1)公司下设几个部门,如技术部、财务部、市场部等。
(2)每个部门承担多个工程项目,每个工程项目属于一个部门。
(3)每个部门有多名职工,每一名职工只能属于一个部门。
(4)一个部门可能参与多个工程项目,且每个工程项目有多名职工参与施工,一个职工可以参与多个项目。
根据职工在工程项目中完成的情况发放酬金。
(5)工程项目有工程号、工程名两个属性;部门有部门号、部门名称、办公电话和办公地点等属性;职工有职工号、姓名、性别属性,出生日期;
问题:
1.根据上述规则设计E-R模型;
2.将E-R模型转换成关系数据模型;
3.利用SQL语句定义上述关系,要求:
(1)为每个关系定义主码和外码;
(2)职工姓名、部门名称不能取空值,并且部门名称是唯一的;
(3)职工的性别只能取“男”和“女”,默认值为“男”;
(4)部门号具有类似“B01”的形式,即每个部门号的首字符为“B”,其余两个字符为数字。
(5)酬金不低于2000元。
4.修改部门号的约束,改为“B001”的形式,每个部门号的首字符为“B”,其余三个字符为数字。
5.在原有关系的基础上,增加一个新列,用于记录每名职工参加项目的起始时间。
6.数据库安全性实验
(1)在SQLServerQueryAnalyzer中建立登录用户u1,u2,u3,u4,并使其成为jwgl数据库的用户。
(2)把对student表的查询权限授予用户u1,并允许其将权限转授给其它用户。
验证u1是否获得相应权限。
(3)用户u1将查询student表的权限授予用户u2。
验证u2是否获得相应权限。
(4)将对course表的查询权限授予所有用户。
(5)建立用户u5,并验证u4和u5是否获得查询course表的权限。
(6)回收u4查询course表的权限,并验证。
实验五T-SQL编程
课程名称:
数据库原理实验
实验类型:
综合型
实验名称
T_SQL编程
学时
4
实验目的和要求:
1.掌握用户自定义类型的使用
2.掌握变量的分类及其使用
3.掌握各种运算符的使用
4.掌握各种控制语句的使用
5.掌握系统函数及用户自定义函数的使用。
实验内容:
1.定义一个函数check_id(),实现如下功能。
对于1个给定的department_id之值,查询该值在department表中是否存在,若存在返回0,否则返回-1。
2.写一段T—SQL脚本程序调用上述函数。
当向student表插入1条记录时,首先调用函数check_id()检索该记录的department_id之值在表departments的department_id字段中是否存在对应值,若存在,则将该记录插入student表中,否则打印错误提示信息。
3.创建一个名为age()的用户自定义函数,用于根据给定的学生编号计算学生的年龄,然后在查询语句中调用该函数。
4.创建一个名为score()的函数,返回一每个学生的学号、姓名、笔试成绩、实验成绩和总成绩,然后在查询语句中调用该函数查询中成绩不及格的学生。
5.打印乘法口诀表,显示格式如下:
实验六存储过程编程
课程名称:
数据库原理实验
实验类型:
综合型
实验名称
存储过程编程
学时
4
实验目的
掌握存储过程的创建及调用。
实验内容
1、请创建存储过程,查看“计算机基础”课程本次考试平均分以及未通过考试的学员名单。
(笔试成绩满分80分,上机成绩满分20分,双科成绩均达到满分的80%以上为优秀,单科不足满分的60%为不合格,否则为合格)。
(提示:
用带有游标的存储过程)
2、修改上题:
由于每次考试的难易程度不一样,每次笔试和机试的及格线可能随时变化(不再是满分的60%),这导致考试的评判结果也相应变化。
(提示:
使用带输入参数的存储过程)
3、修改上题:
返回未通过考试的学员人数。
(提示:
使用带输出参数的存储过程)
4、编写存储过程,显示男生或女生的名单(性别要求通过参数输入)。
格式为:
序号
学号
姓名
(提示:
用带有游标的存储过程)
实验七触发器编程
课程名称:
数据库原理实验
实验类型:
综合型
实验名称
触发器编程
学时
4
实验目的
理解触发器的工作原理,掌握如何使用inserted表和deleted表及如何创建:
INSERT、UPDATE、DELETE触发器。
实验内容
建立银行业务数据库bankdb,其中,帐户信息表(bank)存放帐户的信息,交易信息表(transInfo)存放每次的交易信息。
1、当向交易信息表(transInfo)中插入一条交易信息时,自动更新对应帐户的余额。
2、当删除交易信息表时,要求自动备份被删除的数据到表backupTable中。
3、跟踪用户的交易,交易金额超过20000元,则取消交易,并给出错误提示。
实验报告
1、实验各项内容实现的过程。
2、实验结果分析。
实验八JDBC编程*
课程名称:
数据库原理实验
实验类型:
综合型
学时
4
实验目的:
熟悉使用JDBC来进行数据库应用程序的设计,熟悉通过JDBC接口编程访问数据库并对数据库进行操作。
实验要求:
配置环境变量。
使用Java语言编程实现对数据库的访问,所有的SQL操作均在自己建立的新库里进行,数据库建议选用教务管理数据库,读者可以选择进行创建、插入、查询、删除和更新等操作。
要求:
(1)以对学生表的操作为例,程序循环输出如下格式菜单,根据用户的选择,完成对学生表的各类操作:
1=ListALL;2=List(ByStudent_ID);3=Insert;4=Insert;0=Exit
(2)提交源程序并标识必要的注释。
保证程序能正确编译和运行,认真填写实验报告。
实验九事务与死锁*
课程名称:
数据库原理实验
实验类型:
验证型
学时
4
实验目的
1.了解事务的ACID属性,掌握事务和批处理的工作原理。
2.了解死锁的类型和其兼容性。
3.了解死锁发生的情况。
4.了解可锁定的资源。
5.了解死锁的一般处理过程。
实验内容:
1.银行业务数据库bankdb,其中,帐户信息表(bank)存放帐户的信息,交易信息表(transInfo)存放每次的交易信息。
(1)试用事务解决银行转帐问题。
参考代码如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库原理实验 数据库 原理 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)