DB4302690梁猛.docx
- 文档编号:9667390
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:14
- 大小:197.89KB
DB4302690梁猛.docx
《DB4302690梁猛.docx》由会员分享,可在线阅读,更多相关《DB4302690梁猛.docx(14页珍藏版)》请在冰豆网上搜索。
DB4302690梁猛
《数据库原理》实验报告
题目:
实验四
视图和索引
学号
姓名
班级
日期
2014302690
梁猛
10021401
16/10/20
1.实验内容、步骤以及结果
1.在Student数据库中,利用图形用户界面,创建一个选修了“数据库原理”课程并且是1996年出生的学生的视图,视图中包括学号,性别,成绩三个信息。
(5分)
具体实验步骤:
结果如图所示:
2.用两种不同的SQL语句创建第五版教材第三章第9题中要求的视图(视图名:
V_SPJ)(10分,每种方法5分)。
具体实验步骤:
第一种方法:
代码如下:
createviewV_SP
as
selectsno,pno,qty
fromspj
wherespj.jnoin
(selectjno
fromj
wherej.jname='三建'
)
结果如图:
第二种方法:
代码如下:
createviewV_SPJ
as
selectsno,pno,qty
fromspj,j
wherej.jno=spj.jnoandj.jname='三建'
3.用SQL语句完成第五版教材第三章第11题中的视图查询(10分,每小题5分)。
具体实验步骤:
(1)代码如下:
selectpno,qty
fromV_SPJ
结果如图:
(2)代码如下:
select*
fromV_SPJ
wheresno='s1'
结果如图:
4.用SQL语句完成视图的数据更新。
(15分,每题5分)
(1)给视图V_SPJ中增加一条数据。
提示:
-SPJ表中JNO允许为空时,数据可以插入基本表,此时JNO为NULL,由于JNO为NULL,所以视图中没有该条数据。
-SPJ表中JNO不能为空时,可以使用insteadof触发器实现。
(2)修改视图V_SPJ中的任意一条数据的供应数量。
(3)删除视图V_SPJ中的任意一条数据(注意所创建视图可以视图消解时,才能正常删除,否则会删除失败;也可以考虑用insteadof触发器实现)。
具体实验步骤:
(1)给视图V_SPJ中增加一条数据。
提示:
SPJ表中JNO允许为空时,数据可以插入基本表,此时JNO为NULL,由于JNO为NULL,所以视图中没有该条数据。
SPJ表中JNO不能为空时,可以使用insteadof触发器实现。
代码如下:
insert
intoV_SPJ
values('s5','j3',900)
说明:
必须将主键约束去掉并且允许为空值以后才可插入
结果如图:
(2)修改视图V_SPJ中的任意一条数据的供应数量。
代码如下:
updateV_SPJ
setqty=111
wheresno='s1'andpno='p1'
结果如图:
(3)删除视图V_SPJ中的任意一条数据(注意所创建视图可以视图消解时,才能正常删除,否则会删除失败;也可以考虑用insteadof触发器实现)
代码如下:
createtriggerV_1
onV_SPJ
insteadofdelete
as
declare@snochar(10)
declare@pnochar(10)
declare@qtychar(10)
select@sno=sno,@pno=pno,@qty=qty
from
deleted
deletefromSPJ
whereSPJ.sno=@snoandSpj.pno=pnoandSPj.jno='j1'
结果如图:
5.用图形用户界面对Student数据库中C表的Cno字段创建一个降序排列的唯一索引,索引名称IX_CNo。
(5分)
具体实验步骤:
结果如图:
6.使用SQL语句对Student数据库完成以下的索引操作。
(15分,每题5分)
(1)在C表的CName属性上创建一个非唯一性的聚簇索引,索引名IX_CName。
(提示:
创建这个聚簇索引之前,需要首先删除C表的主键约束。
SQLServer中,给某张表指定主键时,会自动创建为主属性一个聚簇索引。
)
(2)在SC表上创建一个名为IX_Cnosno的非聚簇复合索引,该索引是针对sno,cno属性集建立的升序索引。
(3)删除C表的索引IX_CName。
具体实验步骤:
(1)在C表的CName属性上创建一个非唯一性的聚簇索引,索引名IX_CName。
(提示:
创建这个聚簇索引之前,需要首先删除C表的主键约束。
SQLServer中,给某张表指定主键时,会自动创建为主属性一个聚簇索引。
)
代码如下:
CreateCLUSTEREDindexIX_CName
onS(cname)
结果如图:
(2)在SC表上创建一个名为IX_Cnosno的非聚簇复合索引,该索引是针对sno,cno属性集建立的升序索引。
代码如下:
CREATENONCLUSTEREDINDEXIX_Cnosno
ONSC(snoASC,cnoASC)
结果如图:
(3)删除C表的索引IX_CName。
代码如下:
DropindexIX_CName
ONC
结果如图:
7.自己设计一个实验验证索引对数据库查询效率的提升作用。
(40分)
(提示:
需要数据量比较大的情况下才容易进行对比)
代码如下:
1、创建表:
CREATETABLE[dbo].[Article](
[Id][int]IDENTITY(1,1)NOTFORREPLICATIONNOTNULL,
[MsId][int]NOTNULL,
[Title][nvarchar](96)NOTNULL,
[TitleBak][nvarchar](96)NOTNULL,
[Summary][nvarchar](512)NOTNULL,
[SummaryImageUrl][nvarchar](256)NOTNULL,
[Tag][nvarchar](50)NOTNULL,
[ArticleChannel_Id][int]NOTNULL,
[ArticleCategory_Id][int]NOTNULL,
[IsApproved][bit]NOTNULL,
[Creator_Id][int]NOTNULL,
[CreatedDateTime][datetime]NOTNULL,
[ModifiedDateTime][datetime]NOTNULL,
[ViewCount][int]NOTNULL,
[ReplyCount][int]NOTNULL,
[DiggCount][int]NOTNULL,
[FavoriteCount][int]NOTNULL,
[LastReplyUser_Id][int]NOTNULL,
[LastReplyDateTime][datetime]NOTNULL,
[RightType][int]NOTNULL,
[IsDisplayContent][bit]NOTNULL,
[IsSensitive][bit]NOTNULL,
[Source][int]NOTNULL,
CONSTRAINT[PK_Articles]PRIMARYKEYCLUSTERED
(
[Id]ASC
)
WITH
(
PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)
ON[PRIMARY]
)
ON[PRIMARY]
2、加入测试数据:
DECLARE@numberINT
SET@number=200000
WHILE@number>0
BEGIN
INSERTdbo.Article
(
MsId,
Title,
TitleBak,
Summary,
SummaryImageUrl,
Tag,
ArticleChannel_Id,
ArticleCategory_Id,
IsApproved,
Creator_Id,
CreatedDateTime,
ModifiedDateTime,
ViewCount,
ReplyCount,
DiggCount,
FavoriteCount,
LastReplyUser_Id,
LastReplyDateTime,
RightType,
IsDisplayContent,
IsSensitive,
Source
)
VALUES
(
@number,
'Title'+cast(@numberASVARCHAR(20)),
'TitleBak'+cast(@numberASVARCHAR(20)),
'Summary'+cast(@numberASVARCHAR(20)),
'SummaryImageUrl'+cast(@numberASVARCHAR(20)),
'Tag'+cast(@numberASVARCHAR(20)),
1,
2,
0,
@number,
GETDATE(),
GETDATE(),
100,
29,
123,
12,
@number,
GETDATE(),
1,
0,
0,
2
)
SET@number=@number-1
END
3、没建立索引前,利用语句,查询开销,看执行计划
WITHTEMPAS
(
SELECTROW_NUMBER()OVER(ORDERBYCreatedDateTime)ASROW,CreatedDateTime,ViewCount
FROMArticle
WHERECreator_Id=199996
)
SELECT*
FROMTEMP
WHEREROWBETWEEN1AND5
结果如图:
4.建立索引后查询:
结论:
可以看到,利用索引查询,开销明显减少。
2.实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)
(1)利用索引查询数据,效率明显提高;触发器可以实现表或者视图中难以删除、更改的数据。
(2)视图的操作太糟糕了,因为视图实际上只是一个虚表,不直接依赖于表中的数据,
所以删除,添加麻烦(虽然添加数据的时候提示有一行受到了影响,但是等到删除的时候,却不提示此行被删除,而且视图上也不显示)。
而且当不小心误删的时候,只能去重新创建视图,这个很麻烦。
(3)通过本次试验,掌握使用图形用户界面和SQL语言创建、操作和删除视图。
掌握使用图形用户界面和SQL语言创建和删除索引。
批阅者:
批阅日期:
实验成绩:
批注:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DB4302690 梁猛