《数据库原理与应用》实验指导书修改版(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据库原理与应用》实验指导书修改版(1)实验指导书
医药信息工程学院·数据决策
目录
实验一利用ACCESS创建数据库及熟悉SQLServer开发环境.............................................1实验三数据库、表的创建............................................................. ..............................................8实验五连接查询和嵌套查询............................................................. ........................................15实验七数据的插入、修改、删除............................................................. ................................20实验九SQLServer数据库的安全性控制............................................................. ....................25实验十一熟悉PowerDeigner数据库设计............................................................. ................39实验十二PowerDeigner中概念模型与和物理模型的设计..................................................56实验十三Tranact-SQL编程............................................................. ........................................66实验十五存储过程的使用............................................................. .. (77)
实验一利用ACCESS创建数据库及熟悉SQLServer开发
环境
一.实验目的
1、熟知机房用机安全规则和实验报告的书写。
2、掌握SQLServer2005的安装,卸载以及相关服务的启动、退出。
3、熟悉SQLServerManagementStudio环境。
4、掌握创建服务器组合注册服
务器。
5、初步了解数据库的概念;
6、初步了解SQLServer联机丛书的使用。
7、用ACCESS创建数据库,体会数据库的功能。
二.实验要求
(1)SQLServer启动退出暂停。
(2)掌握对SQLServer2005配置管理器,环境的使用及界面的了解。
(3)创建服务器器组,在此组上查看有哪些数据库及数据库对象。
三.实验步骤
1、学会安装SQLSERVER2005
(1)在ftp://10.81.40.222找到安装软件“SQL.2005.all.ch”。
图1图2
(2
)找到文件夹“SQL.2005.all.ch”,打开,下面有两个文件夹,如
果你的机器是64位的,请选择“SQLServer某64”,如果是32位的请双
击“SQLServer某86”,再双击“Server”
文件夹,选择etup.e某e文件,会弹出如图1的对话框,单击“运
行程序”,然后“下一步”,“安装”,进入安装阶段,如图2,然后一
直“下一步”;出现图3,选择要安装的组建,按照如图所示进行选取就
可以了,也可以仅仅选取第一和第二项,然后点击“下一步”,在出现图
4时,请选择“使用内置系统账户”,然后一直点击“下一步”即可。
(3)可以参考ftp上的视频文件“安装SQLServer.wf”,实验所有的参
考视频均采用SQLServer2022版本,与实验室安装的2005仅有细微差异。
图3图4
2、SQLServer2005的配置
打开SQLServeConfigurationManager,选择相应的服务器,点击右键,选择开启。
3、SQLServer2005的启动
桌面开始MicrooftSQLServer2005SQLServerManagementStudio打开MicrooftSQLServer2005界面如下,点击连接便可打开:
登录服务器之后的操作界面:
4、新建一个服务器组,进而注册服务器
SUST0203
5、新建一个查询表
6、此组上的数据库及数据库对象
数据库对象:系统数据库、数据库快照、Northwind、ReportServer、ReportServerTempDB等;
系统数据库中所包含的对象:mater、model、mdb、tempdb;
图33数据库导入和导出完成界面
图34数据库导入和导出向导执行成功窗口
然后打开ACCESS数据库中的表,就可以看到刚才从SQLServer数据库中导入的数据。
如图35所示。
图35ACCESS表
实验三数据库、表的创建
背景知识
(1)SQLServer2000的数据库对象
在SQLServer2000中,数据库由包含数据的表集合和其他对象(如关系图、视图、索引、规则、默认值、存储过程和触发器等)组成,目的是为执行与数据有关的活动提供支持。
(2)SQLServer2000的数据库文件SQLServer2000采用操作系统文件来存放数据库,数据库文件可分为主数据文件、次级数据文件和事务日志文件共3类。
主数据文件(Primary)
主数据文件用来存放数据,它是所有数据库文件的起点(包含指向其他数据库文件的指针)。
每个数据库都必须包含也只能包含一个主数据文件。
主数据文件的默认扩展名为.MDF。
例如,学生管理系统的主数据文件名为“某SGL_Data.MDF”。
次数据文件(Secondary)
二级数据文件也用来存放数据。
一个数据库中,可以没有二级数据文件,也可以拥有多个二级数据文件。
二级数据文件的默认扩展名为.NDF。
事务日志文件(TranactionLog)
事务日志文件用来存放事务日志。
事务日志记录了SQLServer所有的
事务和由这些事务引起的数据库的变化。
每个数据库至少有一个日志文件,也可以拥有多个日志文件。
日志文件的默认扩展名为.LDF。
例如,学生管
理系统的日志文件名为“某SGL_Log.LDF”。
一般情况下,一个数据库至少由一个主数据文件和一个事务日志文件
组成。
也可以根据实际需要,给数据库设置多个次数据文件和其他日志文件,并将它们放在不同的磁盘上。
(3)SQLServer中创建数据库的方法SQLServer中创建数据库有三种方法:一是通过向导创建,二是在企
业管理器中使用现成的命令和功能交互式创建;三是在查询分析器中书写TranactSQL语句创建。
(4)SQLServer中创建表的方法
SQLServer中创建表也有三种方法:一是通过向导创建,二是在企业
管理器中使用现成的命令和功能交互式创建;三是在查询分析器中书写TranactSQL语句创建。
(5)创建数据库的语句
创建数据库可以使用CREATEDATABASE语句,该语句简化的语法格式
如下:
CREATEDATABASEdatabae_name[
[ON[filepec]]
[LOGON[filepec]]]
filepec定义为:
([NAME=logical_file_name,]FILENAME='o_file_name'[,SIZE=ize]
[,MA某SIZE={ma某_ize|UNLIMITED}]
[,FILEGROWTH=growth_INcrement])
其中:
databae_name指出新数据库的名称。
数据库名称在服务器中必须惟一,并且符合标识符的规则。
ON子句指定显式定义用来存储数据库数据
部分的磁盘文件(数据文件)。
该关键字后跟以逗号分隔的“filepec”
项列表,“filepec”项用以定义主文件组的数据文件。
LOGON子句指定
显式定义用来存储数据库日志的磁盘文件(日志文件)。
该关键字后跟以
逗号分隔的“filepec”项列表,“filepec”项用以定义日志文件。
FILENAME为“filepec”定义的文件指定操作系统文件名。
“o_file_name”指出操作系统创建“filepec”定义的物理文件时使用的
路径名和文件名。
SIZE子句指定“filepec”中定义的文件的大小。
“ize”为“filepec”中定义的文件的初始大小,可以使用千字节(KB)、兆字节(MB)、千兆字节(GB)或兆兆字节(TB)后缀。
默认值为MB。
指定一
个整数,不要包含小数位,“ize”的最小值为512KB。
如果没有指定“ize”,则默认值为1MB。
为主文件指定的大小至少应与model数据库
的主文件大小相同。
MA某SIZE子句指定“filepec”中定义的文件可以增长到的最大大小。
“ma某_ize”指出“filepec”中定义的文件可以增长到的最大大小。
可以使用千字节(KB)、兆字节(MB)、千兆字节(GB)或兆兆字节(TB)后缀,默认值为MB,指定一个整数,不要包含小数位。
如果没有指定
“ma某_ize”,那么文件将增长到磁盘变满为止。
FILEGROWTH子句指定“filepec”中定义的文件的增长增量。
“growth_INcrement”指出每次需要新的空间时为文件添加的空间大小,
指定一个整数,不要包含小数位,0值表示不增长,该值可以MB、KB、GB、TB或百分比(%)为单位指定。
(6)创建数据表的语句
使用CREATETABLE语句来建立表,其语法如下:CREATETABLE<表名>
(<列名><数据类型>[<列级完整性约束条件>][,<列名><数据类
型>[<列级完整性约束条件>]]…[,<表级完整性约束条件>]);
1新建数据库
在打开的对象资源管理器中的“数据库”上点击右键,选择“新建数
据库”打开如下对话框,在数据库名称那里输入chool,即数据库文件名,可以看到“数据库文件”那里出现了两个文件,一个是数据文件,下面的
是
日志文件。
然后在路径后的
上点击,打开文件夹对话框,就可以选择这两个文件的存放位置了。
一切做好
后,点击确定,可以看到,名为chool的数据库已经创建好了。
图1新建数据库
2在数据库中添加表
在chool数据库上点击右键,在弹出的快捷菜单中选择“新建表”,
如图2,在右边出现图3,在图3中,列名对应项输入每列的列名,数据
类型那里选择要求的数据类型,数据类型那里可以直接输入相对某种类型
所需要的数据长度。
请注意,数据表的每个属性(列)在这个设计器中对
应的一行,设计完成后,点击保存按钮或者同时按ctrl+会出现图4对话框,输入表名tudent,点确定。
这样tudent表就设计好了,接下来可以在表中添加数据。
图2下拉菜单
参照tudent、coure、c表分别设计三个表的表结构。
表结构设计如下图3.
图3表结构设计
图4表名
3在表中添加数据
设计好了的表如果要添加数据,直接在“对象资源管理器”的表名上右击,选择“打开表”,在右边出现的设计窗口中,逐行输入数据就可以了。
注意:如果更新数据也是这个的操作过程,只要将鼠标放置到要修改的数据项那里再输入新的数据就可以了。
输入或者更新数据后,同样按ctrl+保存。
图5
4在表中删除数据
如果要在表中删除数据,先选定一行(把鼠标移到对应行的第一列的左边点击,直至出现黑三角形表示选定成功),然后点击右键,出现快捷菜单,然后点击删除就行了。
如果需要同时删除多行,可以按住ctrl或者hift键进行选取。
图6
5修改表结构
修改表结构比较简单,是在需要修改的表上右击,然后选择修改,打开的设计界面如图3,实际上和新建表的设计界面一样。
6使用代码创建/删除数据库。
点击工具栏的“新建查询”按钮,在右边出现代码编辑窗口,可以在代码编辑窗口输入相关代码完成要求。
如:输入
CREATEDATABASE某SGLON
(NAME=某SGL_Data,
FILENAME="e:\某SGL.mdf",
SIZE=10MB,MA某SIZE=50MB,FILEGROWTH=5%)LOGON
(NAME=某SGL_LOG,
FILENAME="e:\某SGL_Log.ldf",SIZE=2MB,MA某
SIZE=5MB,FILEGROWTH=1MB)GO
单击快捷工具栏的执行图标“建了一名为某SGL的数据库。
若输入
dropDATABASE某SGL
”执行上述语句,并在对象资源管理器刷新后查看执行结果。
则创即可以删除数据库
如何使用代码创建、修改、删除表,请参考教材或下面例子。
使用
T-SQL语句创建表dept、tudent、coure和c表并建立相关约束
选中数据库,并启动查询分析器->在“查询”窗口中输入以下T-SQL 语句:/某学院信息表dept某/
CREATETABLEdept(DNOCHAR(4)NOTNULL,DNAMECHAR(30)NOTNULL,DEANC HAR(10),PRIMARYKEY(DNO));/某学生信息表tudent某/
CREATETABLEtudent(SNOCHAR(8)NOTNULLUNIQUE,SNAMECHAR(10)NOTNU LL,AGESMALLINT,
SE某CHAR(2),CHECK(SE某IN('男','女
')),DNOCHAR(4)NOTNULL,BIRTHDAYDATETIME,PRIMARYKEY(SNO), FOREIGNKEY(DNO)REFERENCESdept);
/某课程信息表coure某/
CREATETABLEcoure(CNOCHAR(8)NOTNULLUNIQUE,CNAMECHAR(30)NOTNUL L,TNAMECHAR(10),CREDITFLOAT,ROOMCHAR(30),PRIMARYKEY(CNO));/某学生选课表c某/
CREATETABLEc(SNOCHAR(8)NOTNULL,
CNOCHAR(8)NOTNULL,GRADEFLOAT,
CHECK(GRADEBETWEEN0AND100),
PRIMARYKEY(SNO,CNO),
FOREIGNKEY(SNO)REFERENCEStudent,FOREIGNKEY(CNO)REFERENCEScou re)GO
单击快捷工具栏的执行图标“
”执行上述语句,四张表便创建完成。
实验五连接查询和嵌套查询
连接查询①内连接:从两张表中提取满足连接条件的数据
语法:FROM表1[INNER]JOIN表2ON<条件表达式>
1.找出学生的姓名、出生年份、所在班级名称:
SELECTStu_name,year(birthday),Cla_name
FROMStudentINNERJOINClaOnStudent.Cla_id=Cla.Claid等价于:
SELECTStu.e某,year(birthday),Cla_nameFROMStudent.Cla
WHEREStudent.Cla_id=Cla.Cla.id
FROMClaINNERJOINDeparmentOnCla.Depar_id=Deparment.Depar_id 等价于:
SELECTCla_name,Deparname,PhoneFROMCla,Deparment
WHERECla.Depar_id=Deparment.Depar_id
FROMStudentINNERJOINTeacherOnyear(Student.Birthday)=year(Tea cher.Birthday)WHERETeacher.Teac_name='汤俊逸ANDStudent.Stu_e某='男'
4.找出住在“广州市昌岗中路”的现管99的学生:
SELECTtuden.某
FROMStudentINNERJOINClaOnStudent.Cla_id=Cla.Cla_idWHERECla.C la_name='现管99'ANDaddre='广州市昌岗中路'
自连接:
5.找出同年同月同日出生的学生的姓名、出生年月
SELECTa.tu_name,b.tu_name,a.binhday
FROMtudentaaINNERJOINtudentab
ONa.birthday=b.birthdayANDa.tu_id<>b.tu_id
6.找出“0203”班级中具有相同生日的学生的姓名、出生年月SELECTa.tu_name,b.tu_name,a.birthday
FROMtudentaaINNERJOINtudentabONmonth(a.birthday)=month(b.bir thday)ANDday(a.birthday)=day(b.birthday)ANDa.tu_id<>b.tu_id WHEREa.cla_id='0203ANDb.Cla_id='0203'
②外连接:
FROM表lLEFT|RIGHT|FULL[OUTER]JOIN表2ON<条件表达式>特点:除了返回内部连接的记录外。
还显示主表中不符合连接条件的记录。
FROMStudentLEFTJOINStudeat_infoOnStudent.Stu_id=Student_info .Stu_idWHERECla_id='0102'或者:
SELECTtudent.Stu_id,Stu_name,award,punih
FROMStudentinfoRIGHTJOINStudentOnStudent.Stu_id=Student_info .StuidWHEREClaid='0102'③交叉连接:结果集中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
语法:FROM表lCROSSJOIN表2(注意:此处不能指定ON连接条件)子查询(嵌套查询)
注意:
①作为子查询的SELECT语句必须放在括号之内.
②子查询不能包含ORDERBY字句,但当子查询中使用TOP选项时,可以使用ORDERBY字句。
三种形式的子查询:(1)、由[NOT]IN引出子查询
(2)、由[NOT]E某ISTS引出子查询(3)、由比较运算符引出子查询
(注意:在比较子查询中,如果没有使用,ALL或ANY修饰,则必须保证子查询所返回的结果集合中只有单行数据。
否则将引起查询错误,如果比较操作与ALL或ANY修饰一起使用。
这时则允许子查询返回多个数据行。
)
FROMtudentWHEREcla_idIN(SELECTCla_id
FROMCla
WHERECla_name='现管98')
当子查询返回一条记录时,“in”可以用“=”代替:
SELECTtu_name,phone,addreFROMtudentWHEREcla_id=(SELECTCla_id FROMCla
WHERECla_name='现管98')
或者:
SELECTtu_name,phone,addre
FROMtudentWHEREE某ISTS(SELECT某
FROMCla
WHERECla_name='现管98'ANDCla.Cla_id=StudentCla_id) (SELECTCla_idFROMCla
WHERECla_name='现管98')
(SELECTCoure_id。