SQL实验指导.docx

上传人:b****4 文档编号:11967220 上传时间:2023-04-16 格式:DOCX 页数:57 大小:167.37KB
下载 相关 举报
SQL实验指导.docx_第1页
第1页 / 共57页
SQL实验指导.docx_第2页
第2页 / 共57页
SQL实验指导.docx_第3页
第3页 / 共57页
SQL实验指导.docx_第4页
第4页 / 共57页
SQL实验指导.docx_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

SQL实验指导.docx

《SQL实验指导.docx》由会员分享,可在线阅读,更多相关《SQL实验指导.docx(57页珍藏版)》请在冰豆网上搜索。

SQL实验指导.docx

SQL实验指导

MSSQLServer2005实验指导书

1.实验一、SQL2005初步

1.0实验内容与目的

(1)创建数据库Students;

(2)创建学生、课程、选课等3个数据表,并设置各种约束;表结构及约束如下:

✧学生S(序号SID、学号SNO、姓名Sname、性别SSex、生日SBirthday、年龄SAge、系部SDept、班级SClass),其中,序号--标识列、学号--主键、姓名--唯一键、性别--默认值”男”、年龄--计算列;

✧课程C(课程号CNO、课程名CName、先修课号Cpno、学分CCredit),其中,课程号--主键、先修课号--外键、学分--Check条件(1~8);

✧选课SC(学号SNO、课程号CNO、成绩Grade),其中,(学号、课程号)--主键、学号--外键、课程号--外键、成绩--Check条件(0~100);

(3)录入、编辑3个表的数据;若数据不符合约束条件,会出现失败情况,请注意分析;

(4)将建立的数据库文件拷贝出来(数据库脱机|分离),《实验二》上机时使用(数据库附加);

(5)通过本次实验熟悉SSMS(企业管理器)的基本操作。

操作方法与要点如下:

1.1启动SSMS(俗称SQLServer企业管理器):

✧“开始—程序—MicrosoftSQLServer2005—SQLServerManagementStudio”

1.2已注册服务器

✧打开窗口:

“<菜单>视图—已注册服务器”。

✧添加注册:

”数据库引擎<右>—新建—服务器注册”,”新建服务器注册—常规—服务器名称—浏览更多”,”查找服务器—本地服务器—数据库引擎—XX—确定”,”新建服务器注册—保存”。

✧移除注册:

”数据库引擎—XX<右>—删除”。

✧启动SQLServer服务:

”数据库引擎—XX<右>—启动”。

✧停止SQLServer服务:

”数据库引擎—XX<右>—停止”。

✧重启SQLServer服务:

”数据库引擎—XX<右>—重新启动”。

✧连接到对象资源管理器:

”数据库引擎—XX<右>—连接—对象资源管理器”。

✧查看与更改注册属性:

”数据库引擎—XX<右>—属性”。

说明:

在已注册服务器窗口中可注册多个SQLServer服务,包括本地(本机)、远程(网络上其它机器)的SQLServer服务器,可设置身份验证方式和连接属性。

1.3对象资源管理器

✧打开窗口:

“<菜单>视图—对象资源管理器”

✧连接SQL服务:

”连接—数据库引擎”,…

SQLServer8.0.xxx为SQLServer2000

SQLServer9.0.xxx为SQLServer2005

SQLServer10.0.xxx为SQLServer2008

✧断开连接:

”XX(SQLServer…)<右>—断开连接”。

✧启动、停止、重新启动SQL服务:

”XX(SQLServer…)<右>—启动|停止|重新启动”。

✧查看与更改服务器属性:

”XX(SQLServer…)<右>—属性”,”服务器属性—XX”,…

✧刷新服务器对象信息:

”XX(SQLServer…)<右>—刷新”。

,含连接、断开连接、刷新等。

注:

(1)SSMS(SQLServer企业管理器)为SQL服务器的客户端程序,必须刷新才能与SQL服务器同步。

(2)数据库操作多数是在”对象资源管理器”中进行,请同学们注意区分。

1.4摘要

✧打开窗口:

“<菜单>视图—摘要”

注:

摘要窗口显示对象资源管理器的选中对象内容。

1.5创建数据库

✧创建数据库:

”对象资源管理器—数据库<右>—新建数据库”,”新建数据库—数据库名称—<输入数据库名称>—确定”;确定前,可改变数据库文件目录:

”数据库文件—路径—

”;另外,还可改变初始大小、自动增长等。

”新建数据库—添加”可添加辅数据库文件或日志文件。

✧修改数据库:

”数据库—<右>--属性’’。

✧修改数据库名称:

”数据库—”,再次单击该数据库名。

1.6建表、修改表与表约束

✧建表:

”对象资源管理器—XX(SQLServer…)—数据库——表<右>—新建表”,输入列名、类型、可空等信息。

✧插入列:

”<选定一列><右>一插入列”。

✧删除列:

”<选定一列><右>一删除列”。

✧调整列顺序:

选定列并按住上下拖动。

✧主键:

”<选定一列或多列><右>一设置主键”,选多列:

Ctrl或Shift+点击某列。

✧外键:

”<任选一列><右>一关系”。

设置级联更新:

”外键关系—INSERT和UPDATE规范—更新规则—层叠”,设置级联删除:

”外键关系—INSERT和UPDATE规范—删除规则—层叠”

✧Check约束:

”<任选一列><右>一Check约束”。

如性别SSex的Check约束条件:

(ssex=’男’ORssex=’女’),或(ssexin(‘男’,‘女’))

✧Unique约束:

”<任选一列><右>一索引/键”,”索引/键—添加”,”类型--<选择>唯一键”,”列—<选择列>”,”(名称)--<修改约束名>”。

✧默认值/缺省值:

”<选定列>—列属性—默认值或绑定”。

✧标识列:

列为整数类型(BigInt、Int、SmallInt、TinyInt、Numeric(n,0)、Decimal(n,0))时才可设置,也称自动列;操作:

”<选定列>—列属性—标识规范”,选”是”,”标识种子”设初值(如1000),”标识增量”设步长(如1)。

✧计算列:

”<选定列>—列属性—计算所得的列规范—(公式)”,输入该列的计算公式,如根据生日列SBirthday计算其年龄列Sage,Sage列公式为:

year(getdate())-year(SBirthday)

✧修改表结构:

”数据库——表—<右>—修改”,其它操作同上。

相关菜单:

”表设计器”;工具栏:

”表设计器”

1.7数据库关系图

数据库关系图是一个体现表间外键关系的图,一个数据库可以创建多个关系图,一张表也可以出现在多个图中;关系图可以用来建立和维护外键关系。

✧新建数据库关系图:

”数据库——数据库关系图<右>—新建数据库关系图”。

✧查看和维护关系图:

”数据库——数据库关系图—<右>—修改”

✧关系图-添加表:

”<图空白处><右>—添加表”。

✧关系图-添加外键:

”<选中主表主键列>—<按住并拖放到外建表的列上面>”。

注:

若失败,则检查2张表的数据,看是否符合外键约束。

✧关系图-删除外键:

”<选中外键><右>—从数据库中删除关系”。

✧关系图-查看与编辑外键:

选中外键,在”属性”窗口中查看和修改。

可修改:

约束名、主外键表列、级联删除、级联更新等。

✧关系图-属性窗口:

”<菜单>视图--属性窗口”。

✧关系图-保存:

”<菜单>文件—保存”。

1.8表数据窗口与数据的插入、删除、修改

✧打开表数据窗口:

”数据库——表—<右>—打开表”

✧添加数据:

在表底部空行输入

✧修改数据:

选定网格控件中的一格,直接修改;焦点离开该记录行时提交修改

✧删除数据:

”<选定一行或多行><右>--删除”

✧复制数据:

”<选定一行或多行><右>--复制”,可粘贴到记事本、Word、Excel等之中;粘贴到Excel时若出现乱码,则Excel菜单”编辑—选择性粘贴”,”选择性粘贴—方式—Unicode—确定”

✧粘贴数据:

从Excel复制若干行列数据,”<选定表底部空行><右>--粘贴”,或”<选定表底部空行>--”。

粘贴时要求:

列数及相应类型匹配

✧刷新数据:

”<菜单>查询设计器—执行SQL”,或”<工具栏>查询设计器—

”。

注:

在其它窗口或用户修改了该表数据时,显示的表数据可能与SQL服务器内容不一致

编辑表数据时,出错的可能原因:

数据与主键(唯一性要求、非空要求)、外键(或null,或取值范围为主表的主键列数据集)、非空、Check、Unique等约束相冲突。

1.9数据库的分离与附加、脱机与联机操作

✧分离数据库:

”数据库—<右>--任务—分离”,”分离数据库—删除链接<勾选>--确定”。

说明:

(1)分离数据库需要断开所有对该库的连接,”分离数据库—消息”提示了当前连接情况;

(2)分离前,应该查看数据库属性,记住其文件名称及目录。

✧附加数据库:

”数据库<右>—附加”,”附加数据库—添加<找到数据库文件>--确定”。

注:

若附加的数据库名已存在,则附加操作会失败。

✧数据库脱机:

”数据库—<右>—脱机”。

说明:

脱机后可以拷贝其数据库文件和日志文件,复制的文件可在其它SQL服务器进行附加数据库操作。

✧数据库联机:

”数据库—<右>—联机”。

注意:

要拷贝某数据库的数据文件和日志文件,必须先将该库“脱机”或“分离”;“联机”状态的数据库文件处于打开状态,是不能复制的。

2.实验二SQL脚本文件与查询窗口

2.0实验内容与目的

实验目的:

(1)掌握CREATEDATABASE语句与其子句含义;

(2)掌握CREATETABLE语句格式,及列名、列类型、可空与非空、主键约束、外键约束(含级联更新、级联删除)、唯一键约束、Check约束、默认值、标识列、计算列等表示法;

(3)掌握INSERTINTO语句格式;了解约束对数据的影响;

(4)学习查询窗口的使用与操作。

实验内容:

(1)将《实验一》中的Students数据库附加到本机SQLServer服务器;

(2)使用脚本生成工具生成Students数据库的SQL脚本,编辑得到简洁CREATEDATABASE语句后,保存到Students.SQL文件中;

(3)利用脚本生成工具分别生成3个表的SQL脚本,编辑得到简洁CREATETABLE语句(含约束)后,粘贴到Students.SQL文件中,并保存。

(4)在Students.SQL文件中添加3个表的Insert语句,并保存;

(5)删除原Student数据库,利用Students.SQL文件重建数据库及3个表;

2.1SQL脚本生成

✧生成数据库脚本:

”数据库—<右>—编写数据库脚本为—CREATE到—新查询编辑器窗口”,复制其中的CREATEDATABASE语句;其中,USE[master]--选择当前数据库,GO--执行前面的SQL语句。

✧生成表脚本:

”数据库——表—<右>—编写表脚本为—CREATE到—新查询编辑器窗口”,复制其中的CREATETABLE语句,并改写成含各种约束条件的简洁语句形式。

✧生成insert脚本:

”数据库——表—<右>—编写表脚本为—INSERT到—新查询编辑器窗口”,修改其子句VALUES(…)中内容为要插入的数据。

✧生成数据库中所有对象的SQL脚本:

”数据库—<右>—任务—生成脚本”,在”脚本向导”窗口中按提示操作。

2.2查询窗口

✧新建查询窗口:

”<工具栏>标准—

”。

注:

查询窗口是一个纯文本编辑器。

✧连接:

”<菜单>查询—连接—连接”,或”<工具栏>SQL编辑器—

”。

注:

查询窗口只有处于连接状态,才可以执行窗口中的SQL语句。

✧断开连接:

”<菜单>查询—连接—断开连接”,或”<工具栏>SQL编辑器—

✧选择当前数据库:

”<工具栏>SQL编辑器—

”,或执行use<数据库名>语句。

✧执行SQL语句:

”<工具栏>SQL编辑器—

”,可先选中想要执行的SQL语句,再执行;否则,会执行查询窗口中的所有SQL语句。

注:

(1)可执行所有SQL语句,而不仅仅是SELECT语句;

(2)数据库中一旦CREATE创建了某对象,该对象会永久存储在数据库中;故再次CREATE该对象,会因对象已经存在而报错。

✧保存到文件:

”<菜单>文件—保存XX.sql”。

注:

称为SQL脚本文件,文件后缀名.SQL

✧打开SQL脚本文件:

在Windows资源管理器中双击,或”<菜单>文件—打开—文件”。

✧拖入对象名:

选中各数据库对象,如:

<某数据库>|<某表>|<某列>|…等,按住并拖到查询窗口中,可得到该对象名。

3.实验三SQL查询

3.0实验内容与目的

实验目的:

(1)掌握Select语句的语法格式及其应用;

(2)掌握查询设计器的使用。

实验内容:

(1)建表,请执行附录A.1、A.2中的SQL脚本;

(2)完成附录B.1或B.2中的练习题;并在查询窗口中输入相应的Select语句,验证结果;

(3)使用查询设计器生成Select语句,快速得到你需要的Select语句,并验证结果;

(4)习题答案,参见附录B“SQL查询练习题与参考答案”之B.1、B.2

3.1表数据窗口与查询设计器工具栏

✧打开表数据窗口:

”数据库——表—<右>—打开表”

✧查询设计器工具栏:

,分别为:

显示关系图窗格、显示条件窗格、显示SQL窗格、显示结果窗格、更改类型、执行SQL、验证SQL语句语法、添加/移出分组依据、添加表等。

✧关系图窗格:

可添加或移出表---FROM子句。

多表时根据外键关系自动设置为内连接,可更改为左连接、右连接、全连接或交叉连接,也可删除连接。

✧条件窗格:

(列、别名、表、输出)---SELECT子句;(排序类型、排序次序)---ORDERBY子句;(筛选器、或..)---WHERE子句,同列之间---AND,异列之间---OR。

✧条件窗格<分组依据按下时>:

<分组依据=GroupBy>时,(列、别名、表、输出)---GROUPBY子句及SELECT子句;<分组依据!

=GroupBy>时,(列、别名、表、输出)---带集函数的SELECT列;<分组依据=Where>时,(筛选器、或..)---WHERE子句;<分组依据!

=Where>时,(筛选器、或..)---HAVING子句。

✧SQL窗格:

显示SELECT语句,在这里,看是不是你想要的Select语句!

✧结果窗格:

显示SELECT语句的执行结果。

✧查询属性窗口:

”<菜单>视图--属性窗口”。

可设置SELECT子句中的DISTINCT、TOPn、TOPnPERCENT;分组查询时,可设置GROUPBY的扩展选项:

WITHCUBE、WITHROLLUP;选中”关系图窗格--XX表”时,可设置表的别名;

3.2查询窗口与查询设计器

当前窗口为查询窗口时,系统会多出一个菜单--“查询”。

先将光标定位在想要得到的SQL语句的位置上,然后进行下面的操作。

✧查询设计器:

”<菜单>查询--在编辑器中设计查询”,弹出”查询设计器”窗口,该窗口包含三个窗格:

关系图窗格、条件窗格、SQL窗格,操作方法与3.1节相同,”查询设计器--确定”后会将SQL语句复制到查询窗口的当前光标位置。

3.3视图

视图定义与维护。

3.4索引

索引的定义与维护。

3.5同义词

同义词的定义与维护。

4.实验四T_SQL存储过程、函数、触发器、游标

4.0实验内容与目的

实验目的:

(1)学习存储过程、函数与触发器等编程方法,熟悉相关T_SQL语法;

(2)学习对存储过程、函数与触发器等进行调用与测试的方法;

(3)进一步熟悉SQL脚本文件,以及查询窗口的使用;

实验内容:

(1)案例1(基础)--必做;见4.1节

(2)案例2(提高)--选做;见4.2~4.5节

4.1案例1:

”学生-成绩”数据库

实验准备:

将附录A.1的SQL脚本复制到查询窗口,执行后,将会创建表并插入实验数据。

实验内容:

分别实现下列触发器、存储过程与函数,并测试其调用(触发)方法。

(1)触发器:

禁止插入数学系(MA)学生记录

createtriggertri_Stu

onStudentforinsert

AS

begin

ifexists(select*frominsertedwhereSdept='MA')

rollback;

end

测试方法:

打开学生表Student,插入一条系部为MA的记录;或用Insert语句插入。

(2)存储过程:

计算某系的学生人数

createprocedureGetStudentNumByDept

@deptchar

(2),@Numintoutput

as

SELECT@Num=count(*)

FROMStudent

WHERE(Sdept=@dept)

测试方法:

declare@retint,@numOfStuint

EXEC@ret=GetStudentNumByDept'CS',@numOfStuoutput--不要漏写output

select@numOfStu学生人数,@ret返回码

或:

declare@numOfStuint

EXECGetStudentNumByDept'CS',@numOfStuoutput--不要漏写output

select@numOfStu学生人数

(3)函数:

计算某系的学生人数

createfunctionfn_GetStudentNumByDept(@deptchar

(2))

returnsint

as

begin

declare@Numint

SELECT@Num=count(*)

FROMStudent

WHERE(Sdept=@dept)

return@Num

end

测试方法:

selectdbo.fn_GetStudentNumByDept('CS')

或:

selectdistinctsdept,dbo.fn_GetStudentNumByDept(sdept)fromstudent

4.2案例2:

银行储蓄与信用帐户

案例2:

银行储蓄与信用帐户的存款、取款、转账业务,要求记录每一笔业务历史记录。

简易设计为2个表:

(1)帐户表(帐户号、身份证号、帐户余额、信用额度、开户日期、帐户状态),帐户状态:

有效、挂失、销户;

(2)交易记录(ID、帐户号、交易金额、交易时间、交易类型、对方帐户号),交易类型:

存款、取款、转出、转入。

相关业务规则:

(1)帐户状态有效时,才可进行存款、取款、转账业务;挂失7天后才能销户;销户时帐户余额必须为0;

(2)取款时,(帐户余额-取款金额)>0;(3)转出时,(帐户余额+信用额度-转账金额)>0;(4)所有业务(包括开户、存款、取款、转账、挂失、取消挂失、销户等)必须记录在交易记录表中。

部分触发器设计,例如:

(1)禁止帐户表的删除操作;

(2)帐户表不允许一次修改多行,且每次仅允许修改一个数据项,并禁止修改帐户号、身份证号及开户日期;--考虑帐户状态时呢?

(3)禁止交易记录表的修改及删除操作;等等。

部分存储过程与函数设计,例如:

(1)开户(身份证号、开户金额);

(2)存款(帐户号、存款金额);(3)取款(帐户号、取款金额);(4)转账(转出帐户、转入帐户、转账金额);(5)查询账户(身份证号),函数;等等。

请实现上述存储过程或触发器:

3~4个。

4.3案例2:

建表SQL脚本示例

CREATETABLE[dbo].[帐户表](

[帐户号][numeric](8,0)NOTNULL,

[身份证号][nvarchar](18)NOTNULL,

[帐户余额][money]NOTNULL,

[信用额度][money]NOTNULLDEFAULT((0)),

[开户日期][datetime]NOTNULLDEFAULT(getdate()),

[帐户状态][nchar]

(2)NOTNULLDEFAULT(N'有效'),

CONSTRAINT[PK_帐户表]PRIMARYKEY([帐户号])

GO

insertinto[帐户表]([帐户号],[身份证号],[帐户余额])

values(10000018,'420400199211090003',15000);

insertinto[帐户表]([帐户号],[身份证号],[帐户余额])

values(10000019,'420400199210210015',9000);

GO

CREATETABLE[dbo].[交易记录](

[SID][decimal](18,0)IDENTITY(1000,1)NOTNULL,

[帐户号][numeric](8,0)NOTNULL,

[交易金额][money],

[交易时间][datetime]NOTNULL,

[交易类型][nchar]

(2)NOTNULL,

[对方帐户号][numeric](8,0),

CONSTRAINT[PK_交易记录]PRIMARYKEY([SID])

GO

4.4案例2:

触发器SQL脚本示例

CREATETRIGGER[Trigger_DELETE_账户表]

ON[帐户表]AFTERDELETE

AS

BEGIN

SETNOCOUNTON;

rollback;

--raiserror(N'不允许删除账户',16,1);

END

GO

CREATETRIGGER[Trigger_UPDATE_账户表]

ON[帐户表]AFTERUPDATE

AS

DECLARE

@errSumint,@recordsSumint,@columnsSumint;

BEGIN

SETNOCOUNTON;

set@errSum=0;

select@recordsSum=count(*)fromdeleted;

--select@recordsSum=count(*)frominserted;

if(@recordsSum>1)set@errSum=@errSum+1;

if(UPDATE([帐户号]))set@errSum=@errSum+1;

if(UPDATE([身份证号]))set@errSum=@errSum+1;

if(UPDATE([开户日期]))set@errSum=@errSum+1;

--ifexists(selectA.*frominsertedA,deletedBwhereA.[帐户号]=B.[帐户号]

--andA.[开户日期]<>B.[开户日期])set@errSum=@errSum+1;

set@columnsSum=0;

if(UPDATE([帐户余额]))set@columnsSum=@columnsSum+1;

if(UPDATE([信用额度]))set@columnsSum=@columnsSum+1;

if(UPDATE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1