数据库原理实验报告.docx
《数据库原理实验报告.docx》由会员分享,可在线阅读,更多相关《数据库原理实验报告.docx(32页珍藏版)》请在冰点文库上搜索。
数据库原理实验报告
《数据库原理》
实验报告书
班级:
学号:
姓名:
指导教师:
实验成绩:
中南林业科技大学涉外学院理工系
数据库原理实验安排………………………………………………3
实验一数据库和表的建立、数据操作…………………………4
实验二SQL语言的使用……………………………………………9
实验三完整性、安全性实现……………………………………16
实验四数据库编程………………………………………………18
附录一SQL Server的安装……………………………………20
数据库原理实验安排
一、实验目的
通过实验,使学生熟悉并掌握数据库的基本概念、基本原理、和基本技术;能够应用这些理论和技术设计合理的数据库;更重要的是通过教学活动,使学生能够把与数据库相关的先修后继知识融会贯通,初步具有开发完整可用的数据库系统的能力。
二、实验安排
本门课程共分4个实验,8学时
实验一数据库和表的建立、数据操作2学时
实验二SQL语言的使用2学时
实验三完整性、安全性实现2学时
实验四数据库编程2学时
三、实验考核
实验成绩通过实验报告及每次实验后的验机给出,每次实验结束后都必须写出实验报告。
实验一数据库和表的建立、数据操作
一、实验目的:
掌握使用SQL语言进行数据定义和数据操纵的方法。
二、实验要求:
建立一个数据库stumanage,建立三个关系表students,course,grade。
向表中插入数据,然后对数据进行删除、修改等操作,对关系、数据库进行删除操作。
三、实验步骤:
1、在SQLServer中输入本机器的名字,选择“windows身份验证”。
点击确定连接SQLServer数据库服务器。
2、新建查询分析器。
3、在查询分析器中输入SQL语句------建立数据库stumanage。
然后单击上面的绿色三角形右箭头。
下部的空白区显示该语句的运行情况。
4、选择数据库stumanage为当前数据库。
5、如下图建立表students:
列名数据类型允许空主键说明
(1)snoChar(8)否是学号
(2)snameVarchar(20)是否姓名
(3)sexChar
(2)是否性别
(4)deptVarchar(20)是否所在系
如下图建立表:
course
列名数据类型允许空主键说明
(1)cnoChar(6)否是课程号
(2)cnameVarchar(20)是否课程名
如下图建立表sc:
(注:
包括两个外键,sno和cno共同组成主键)
列名数据类型允许空主键外键说明
(1)snoChar(8)否是students(sno)学号
(2)cnoChar(6)否是course(sno)课程号
(3)gradeint否否否成绩
6、使用SQL语句完成建表操作并以截屏的方式将建表操作过程粘贴在下方表格中。
建立表
student
建立表
course
建立表
sc
7、在students表中插入以下数据:
(1)20050101,王飞,男,计算机系
(2)20050102,李丽,女,信息系
(3)20050103,张晨,女,信息系
(4)20050104,刘建峰,男,信息系
(5)20050105,李勇志,男,信息系
(6)20050106,邹红艳,女,计算机系
8、在course表中插入以下数据:
(1)01,数据结构
(2)02,数据库原理
(3)03,计算机组成原理
(4)04,Java程序设计
(5)05,算法导论
9、在sc表中插入以下数据:
(1)20050101,01,70
(2)20050101,02,90
(3)20050101,03,93
(4)20050101,04,85
(5)20050102,02,77
(6)20050102,03,84
(7)20050102,04,88
(8)20050102,05,80
(9)20050103,02,79
(10)20050103,03,96
(11)20050103,04,70
(12)20050105,01,90
(13)20050105,02,93
(14)20050105,03,56
(15)20050105,04,85
(16)20050105,05,82
(17)20050106,01,91
(18)20050106,03,82
(19)20050106,04,87
(20)20050106,05,94
10、对每一门课,求学生的平均成绩,并把结果以基本表的形式存入数据库。
将操作过程和结果展示以截屏的方式粘贴在下方表格中。
11、修改sc表中sno为20050102、cno为02的记录的grade属性值为85,然后将该条记录删除。
将操作过程和结果展示以截屏的方式粘贴在下方表格中。
12、删除‘李丽’的所有选课情况。
将操作过程和结果展示以截屏的方式粘贴在下方表格中。
13、删除数据库中的三个表中的所有数据,将操作过程和结果展示以截屏的方式粘贴在下方表格中。
14、删除数据库中的三个表结构。
将操作过程和结果展示以截屏的方式粘贴在下方表格中。
15、删除数据库,将操作过程和结果展示以截屏的方式粘贴在下方表格中。
四、实验分析和体会:
这次实验让我粗略的了解如何创建数据库、如何创建表格、如何插入信息、如何查询信息以及如何删除信息。
这次实验让我感觉意识到,数据库语言与c语言和java语言还是有许多不同的,如果用之前学过的思想来学数据库的话还是不行的,必须从头开始。
不过还是有共同点的,那就是多练,多想。
实验二SQL语言的使用
一、实验目的:
掌握使用SQL语言进行各种查询的操作和视图的操纵方法。
二、实验要求:
在现有的数据库上进行各种查询操作,对视图、存储过程的创建、使用等操作。
三、实验步骤:
1、在SQLServer中输入本机器的名字,选择“windows身份验证”。
点击确定连接SQLServer数据库服务器。
2、新建查询分析器。
3、在查询分析器中输入SQL语句,建立起实验要操作的数据库test1,并在库中建立表、数据(数据参照教材第二章习题)。
4、在数据库test1中进行下列查询操作,将查询语句与结果(结果以截屏图片的方式)写入下面的表格中。
(1)查询所有供应商情况,先按城市升序排列,城市相同按供应商名称降序排列。
SQL语句:
select*FromSORDERBYcity,snameDESC
结果
(2)查询所有零件情况,先按零件名称升序排列,零件名称相同按重量降序排列。
SQL语句:
select*FromPORDERBYpname,weightDESC
结果:
(3)查询项目名中含有“厂”的项目情况。
SQL语句:
selectjname,jnoFromJWherejnamelike‘%厂%’
结果:
(4)查询供应商名称中第二个字为“方”的供应商情况。
SQL语句:
SELECTSname,SnoFROMSWHERESnameLIKE‘_方%’
结果:
(5)查询所有零件中的最大、最小、平均重量。
SQL语句:
selectmax(weght)最大值,min(weight)最小值,avg(weight)平均值FromP
结果:
(6)查询零件中名为“螺丝刀”的零件的种类数、平均重量。
SQL语句:
SELECTAVG(weight),count(*)FROMPWHEREpname='螺丝刀'
结果:
(7)查询供应商S1所供应的各种零件的名称和数量。
SQL语句:
selectpname零件名称,qty零件数量FromSPJ,PWhereSJP.pno=P.pno,AndSJP.sno=‘s1’
结果:
(8)查询工程J1所使用的各种零件的名称和数量。
SQL语句:
selectpname零件名称,sum(qty)零件数量fromSPJleftouterjoinPon(SPJ.pno=P.pno)whereSPJ.jno='j1'groupbypname
结果:
(9)查询没有使用红色螺丝刀的工程名称。
SQL语句:
selectjname没有使用红色螺丝刀的工程名称fromJwherenotexists(select*fromSPJ,PwhereSPJ.pno=P.pnoandSPJ.jno=J.jnoandcolor='红色'andpname='螺丝刀');
结果:
(10)查询没有供应红色螺丝刀的供应商名称。
SQL语句:
selectsno没有供应红色螺丝刀的供应商fromSwherenotexists(select*fromSPJ,PwhereSPJ.pno=P.pnoandSPJ.sno=S.snoandcolor='红色'andpname='螺丝刀');
结果:
(11)查询所用零件数量超过500的工程项目号。
SQL语句:
selectjno所用零件数量超过的工程项目号fromSPJgroupbyjnohavingsum(qty)>500
结果:
(12)查询所用零件种类超过3种的工程项目名称。
SQL语句:
selectjname所用零件种类超过种的工程项目名称fromJwherejnoin(selectjnofromSPJgroupbyjnohavingcount(pno)>3);
结果:
(13)查询使用了全部零件的工程项目名称。
SQL语句:
selectjname所用全部零件的工程项目名称fromJwherejnoin(selectjnofromSPJgroupbyjnohavingcount(pno)=6);
结果:
(14)查询至少供应了工程J1所使用的全部零件的供应商名称。
SQL语句:
selectsname至少供应了工程J1所使用的全部零件的供应商名称fromSwherenotexists(select*fromSPJXwhereX.jno='j1'andnotexists(select*fromSPJYwhereS.sno=Y.snoandX.pno=Y.pno))
结果:
(15)查询供应情况,显示内容为供应商名称、零件名、工程名称、数量。
SQL语句:
selectsname供应商名称,pname零件名,jname工程名称,qty数量fromS,P,J,SPJwhereS.sno=SPJ.snoandP.pno=SPJ.pnoandJ.jno=SPJ.jno
结果:
(16)查询“东方红”供应商供应情况,显示供应的零件名、工程名称、数量。
SQL语句:
selectpname零件名,jname工程名称,qty数量fromS,P,J,SPJwhereS.sno=SPJ.snoandP.pno=SPJ.pnoandJ.jno=SPJ.jnoandsname='东方红'
结果:
5、请为机车厂工程项目建立一个供应情况的视图,包括供应商代码,零件代码,供应数
量。
针对该试图完成如下查询,将查询语句与结果(结果以截屏图片的方式)写入下面的表格中。
(1)查询机车厂工程项目使用的各种零件代码及其数量。
SQL语句:
createviewjccasselectsno,pno,qtyfromSPJ,JwhereJ.jno=SPJ.jnoandjname='机车厂'
结果:
(2)查询处供应商S2的供应情况。
SQL语句:
select*fromjccwheresno='s2'
结果:
四、实验分析和体会:
这次实验让我熟练了创建数据库,创建表格,插入信息,查询信息,删除信息等基础操作并得到加强,还学到了许多新的知识。
让我对数据库有了更深了理解。
SQL语言和其他语言一样,书本上的知识是有限的,必须得上网,翻课外书,查找所需的资料,这样才能使自己学习的更完善。
实验三完整性、安全性实现
一、实验目的:
使学生加深对数据库安全性和完整性的理解,并掌握SQLServer中有关用户、角色及操作权限的管理方法,学会创建和使用规则、缺省和触发器。
二、实验要求:
通过实验对数据进行完整性控制、安全性维护。
三、实验步骤:
1、数据库的安全性实验:
在SQLServer服务器中,设置SQLServer的安全认证模式,实现对SQLServer的用户和角色管理,设置和管理数据操作权限。
2、数据库的完整性实验:
使用Transact-SQL设计规则、缺省、约束和触发器,通过SQLServer管理器定义它们。
(1)在SQLServer管理器中,为所属的SQL服务器设置WindowsNT安全认证模式。
(2)在SQLServer管理器中为自己建立一个服务器用户、数据库用户和数据库角色。
并将自己创建的学生选课库的所有操作权赋予它们,将设计数据库的操作权赋予新建的数据库用户。
图书(书号,类别,出版社,作者,书名,定价,作者);
读者(编号,姓名,单位,性别,电话);
借阅(书号,读者编号,借阅日期)
(3)用企业管理器创建触发器的步骤如下:
①定义学生表所在系属性为“计算机系”的缺省,并捆绑缺省到学生表中。
②利用触发器来保证学生选课库中选课表的参照完整性,以维护其外码与参照表中的主码一致。
(4)为图书读者库中的借阅表建立一个保证参照完整性,以维护外码与被参照表中的主码一致的触发器。
(5)建立一个学生与选课表间来维护参照完整性而使用的级联删除触发器、级联修改触发器和受限插入触发器。
四、实验分析和体会:
这次动手做实验,使得数据库的一些理论知识和实践相结合,更加深刻了我对数据库完整性和安全性的认识,巩固了我的理论知识,熟练了SQLSever的操作。
这次实验让我知道了完整性是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出曹成的无效操作和错误结果,安全性是防止数据库被恶意的破坏和非法的存取。
而完整性和安全性也是密切相关的,特别是从系统实现的方法来看,某一种机制常常既可以用于安全保护也可用于完整性保证。
实验四数据库编程
一、实验目的:
熟悉并掌握嵌入式SQL编程、存储过程、ODBC的原理和使用。
二、实验要求:
掌握使用存储过程来进行数据库应用程序的设计。
三、实验步骤:
1、对“学生—课程数据库”编写存储过程,完成下面功能:
存储过程创建过程:
usestumanagecreateprocedureProc2asselect
cname,count(casewhengrade<60then1end)[0-60],
count(casewhengrade<70andgrade>=60then1end)[60-70],
count(casewhengrade<80andgrade>=70then1end)[70-80],
count(casewhengrade<90andgrade>=80then1end)[80-90],
count(casewhengrade<100andgrade>=90then1end)[90-100]
fromcourseinnerjoinscon(o=o)
wherecname='数据库原理'groupbycnameexecuteProc2
调用存储过程结果演示:
(1)统计数据库原理课程的成绩分布情况,按照各分数段统计人数;
(2)统计任意一门课程的平均成绩;
存储过程创建过程:
createproceduremyprocedureasselectameas'课程名字',avg(grade)as'平均成绩'fromcourse,scwhereo=o
groupbyameexecutemyprocedure
调用存储过程结果演示:
(3)查询某一门课程的信息。
要查询的课程由用户指定,如果输入的课程不存在,系统给出提示:
输入的课程不存在,请重新输入。
存储过程创建过程:
Createproceduremyproc@inputNamevarchar(20)ASIF@inputNameNOTIN(SELECTcnameFROMcourse)print'输入的课程不存在,请重新输入.'ELSESELECT*FROMcourseWHEREcname=@inputNameexecutemyProc@inputName='数据结构'
调用存储过程结果演示:
四、实验分析和体会:
这次实验虽然需要灵活运用SQL语言的各种知识,但完成的还算顺利。
对此,我有了一些感想。
就是学什么都一样,都得从简单的学起,基本的学期,就像要学会走,才能学会跑;学会字母,才能认识单词;学会基本功,才能做出各种高难度动作。
程序语言亦是如此,不可算法都不会写就去读大程序,这种好高骛远的想法得杜绝。
只要你系统的,一步一个脚印,踏踏实实的坚持练习,假以时日,必定成为一代程序大师的。
附录一:
SQLServer的安装
MicrosoftSQLServer2008基本安装说明
安装SQL2008的过程与SQL2005的程序基本一样,只不过在安装的过程中部分选项有所改变,当然如果只熟悉SQL2000安装的同学来说则是一个革命性的变动,
一、安装前的准备
1.需要.NetFramework3.5,若在Vista或更高的OS上需要3.5SP1的支持(在SQL2008安装的前会自动更新安装)
2.需要WidnowsPowerShell的支持,WPS是一个功能非常强大的Shell应用,命令与DOX/UNIX兼容并支持直接调用.NET模块做行命令编辑,是非常值得深入研究的工具(在SQL2008安装时会自动更新安装)
3.需要确保WindowsInstaller的成功启动,需要4.5以上版本(需要检查服务启动状态service.msc)
4.需要MDAC2.8sp1的支持(XP以上系统中已集成)
5.若机器上已经安装Visualstudio2008则需要VS2008sp1以上版本的支持(需要自己从MS的网站上下载安装
二、安装配置过程
1.进行SQLServer安装中心,选择"安装"选项,在新的电脑上安装SQL2008可以直接选择“全新SQLServer独立安装或向现有安装功能",将会安装一个默认SQL实列,如下图
2.功能选择,对于只安装数据库服务器来说,功能的选择上可以按实际工作需要来制定,本人一般选择:
数据库引擎服务、客户端工具连接、SQLServer联机丛书、管理工具-基本、管理工具-完整
其中数据库引擎服务是SQL数据库的核心服务,Analysis及Reporting服务可按部署要求安装,这两个服务可能需要IIS的支持。
如下图
3.实列设置,可直接选择默认实例进行安装,或则若同一台服务器中有多个数据服务实列可按不同实列名进行安装。
如图
4.服务器配置,服务器配置主要是服务启动帐户的配置,服务的帐户名推荐使用NTAUTHORITY\SYSTEM的系统帐户,并指定当前选择服务的启动类型,如图
5.数据库引擎配置,在当前配置中主要设置SQL登录验证模式及账户密码,与SQL的数据存储目录,身份验证模式推荐使用混合模式进行验证,在安装过程中内置的SQLServer系统管理员帐户(sa)的密码比较特殊,SQL2008对SA的密码强度要求相对比较高,需要有大小写字母、数字及符号组成,否则将不允许你继续安装。
在"指定SqlServer管理员"中最好指定本机的系统管理员administrator。
如图