学习与管饭的我的笔记 (5)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

视图的概念视图是从一个或多个表(或视图)导出的虚拟表。视图是数据库的用户使用数据库的观点。视图与表(有时为与视图区别,也称表为基本表——BaseTable)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。使用视图的优点提供最新的数据。具有更好的安全性,有利于提高数据库逻辑独立性。针对性强。建立视图的四种类型表中列的子集表中行的子集两个或多个表的连接聚集信息使用视图的一些限制列数不能超过1024列。不能跨数据库引用列。只能访问视图定义所涉及到的列。通过视图操纵数据时不能违背建立表时所建立的约束。视图最多嵌套32层。定义视图时不能使用ORDERBY语句。建立视图用CREATEVIEW语句创建用企业管理器创建使用视图向导创建CREATEVIEW语句CREATEVIEW视图名[(列名[,列名]…)]AS子查询[WITHCHECKOPTION]/*透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式)*/说明DBMS执行CREATEVIEW语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。组成视图的属性列名省略全部列:由子查询中SELECT目标列中的诸字段组成。明确指定视图的所有列名:某个目标列是集函数或列表达式目标列为*多表连接时选出了几个同名列作为视图的字段需要在视图中为某个列启用新的更合适的名字行列子集视图[例]建立信息系学生的视图。CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept='IS';从单个基本表导出,只是去掉了基本表的某些行和某些列,保留了码。WITHCHECKOPTION的视图[例2]建立信息系学生的视图,并要求透过该视图进行的更新操作只涉及信息系学生。CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept='IS'WITHCHECKOPTION;对IS_Student视图的更新操作修改操作:DBMS自动加上Sdept='IS'的条件删除操作:DBMS自动加上Sdept='IS'的条件插入操作:DBMS自动检查Sdept属性值是否为'IS'如果不是,则拒绝该插入操作如果没有提供Sdept属性值,则自动定义Sdept为'IS'建立视图(续)[例7]将学生的学号及他的平均成绩定义为一个视图,假设SC表中“成绩”列Grade为数字型CREATVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno建立视图(回顾)行列子集视图WITHCHECKOPTION的视图基于多个基表的视图基于视图的视图带表达式的视图分组视图注:视图是虚表,是导出的表以SELECT*方式创建的视图可扩充性差,应尽可能避免视图的修改与删除ALTERVIEW视图名(列名…)AS查询[WITHCHECKOPTION]DROPVIEW视图名视图的查询从用户角度:查询视图与查询基本表相同DBMS实现视图查询的方法:实体化视图(ViewMaterialization)有效性检查:检查所查询的视图是否存在执行视图定义,将视图临时实体化,生成临时表查询视图转换为查询临时表查询完毕删除被实体化的视图(临时表)视图的查询视图消解法(ViewResolution)进行有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询执行修正后的查询查询视图(续)[例]在信息系学生的视图中找出年龄小于20岁的学生。SELECTSno,SageFROMIS_StudentWHERESage20;IS_Student视图的定义(视图定义例1):CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept='IS‘;视图的查询(续)视图实体化法视图消解法转换后的查询语句为:SELECTSno,SageFROMStudentWHERESdept='IS'ANDSage20;查询视图(续)视图消解法的局限有些情况下,视图消解法不能生成正确查询。采用视图消解法的DBMS会限制这类查询。查询视图(续)[例3]在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩SELECT*FROMS_GWHEREGavg=90;S_G视图定义:CREATEVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno;查询转换错误:SELECTSno,AVG(Grade)FROMSCWHEREAVG(Grade)=90GROUPBYSno;正确:SELECTSno,AVG(Grade)FROMSCGROUPBYSnoHAVINGAVG(Grade)=90;注:目前大多RDBMS不能正确转换,但一般行列子集视图的查询均能正确转换更新视图用户角度:更新视图与更新基本表相同DBMS实现视图更新的方法视图实体化法(ViewMaterialization)视图消解法(ViewResolution)指定WITHCHECKOPTION子句后DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新更新视图(续)[例1]将信息系学生视图IS_Student中学号95002的学生姓名改为“刘辰”。UPDATEIS_StudentSETSname='刘辰'WHERESno='95002';转换后的语句:UPDATEStudentSETSname='刘辰'WHERESno='95002'ANDSdept='IS';更新视图(续)[例2]向信息系学生视图IS_S中插入一个新的学生记录:95029,赵新,20岁INSERTINTOIS_StudentVALUES(‘95029’,‘赵新’,20);转换为对基本表的更新:INSERTINTOStudent(Sno,Sname,Sage,Sdept)VALUES('95029','赵新',20,'IS');更新视图(续)[例3]删除视图CS_S中学号为95029的记录DELETEFROMIS_StudentWHERESno='95029';转换为对基本表的更新:DELETEFROMStudentWHERESno='95029'ANDSdept='IS';更新视图的限制一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新(对两类方法均如此)例:视图S_G为不可更新视图。CREATEVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno;更新视图(续)对于如下更新语句:UPDATES_GSETGavg=90WHERESno='95001';无论实体化法还是消解法都无法将其转换成对基本表SC的更新可更新视图条件满足以下条件的视图:创建视图的select语句中没有聚合函数,且没有top,groupby,union子句及distinct关键字;创建的select语句中不包含从基本表通过计算所得的列;创建视图的select语句的from子句中至少要包含一个基本表。可更新的分区视图。通过insteadof触发器创建的可更新视图。建立与删除索引建立索引是加快查询速度的有效手段建立索引DBA或表的属主(即建立表的人)根据需要建立有些DBMS自动建立以下列上的索引PRIMARYKEYUNIQUE维护索引DBMS自动完成使用索引DBMS自动选择是否使用索引以及使用哪些索引建立索引的作用快速存取数据保证数据记录的惟一性实现表与表之间的参照完整性在使用orderby,groupby子句进行数据检索时,利用索引可以减少排序和分组的时间。索引的分类聚集索引将数据行的键值在表内排序并存储对应的数据记录,使得数据表物理顺序与索引顺序一致。非聚集索引完全独立于数据行的结构。两类都是按B树组织索引的,但聚集索引B树的叶结点存放数据页信息,是按索引键的次序存储的,因此对查找记录很有效;而非聚集索引B树的叶结点不存放数据页信息,而存放非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行。建立索引CREATE[UNIQUE][CLUSTER]INDEX索引名ON表名(列名[次序][,列名[次序]]…);用表名指定要建索引的基本表名字索引可以建立在该表的一列或多列上,各列名之间用逗号分隔用次序指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASCUNIQUE表明此索引的每一个索引值只对应唯一的数据记录CLUSTER表示要建立的索引是聚簇索引例题[例]为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。CREATEUNIQUEINDEXStusnoONStudent(Sno);CREATEUNIQUEINDEXCoucnoONCourse(Cno);CREATEUNIQUEINDEXSCnoONSC(SnoASC,CnoDESC);建立索引(续)唯一值索引对于已含重复值的属性列不能建UNIQUE索引对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束建立索引(续)聚簇索引:建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致CREATECLUSTERINDEXStusnameONStudent(Sname);在Student表的Sname(姓名)列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放建立索引(续)在一个基本表上最多只能建立一个聚簇索引聚簇索引的用途:对于某些类型的查询,可以提高查询效率聚簇索引的适用范围很少对基表进行增删操作很少对其中的变长列进行修改操作删除索引DROPINDEX索引名;删除索引时,系统会从数据字典中删去有关该索引的描述。[例]删除Student表的Stusname索引。DROPINDEXStusname;

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功