实验六 视图和索引 实验指导.docx
- 文档编号:729422
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:14
- 大小:286.43KB
实验六 视图和索引 实验指导.docx
《实验六 视图和索引 实验指导.docx》由会员分享,可在线阅读,更多相关《实验六 视图和索引 实验指导.docx(14页珍藏版)》请在冰豆网上搜索。
实验六视图和索引实验指导
实验六视图和索引实验指导
一、视图
视图是SQLServer中重要的数据库对象。
视图常用于集中、简化和定制显示数据库的数据信息,为用户从多种角度观察数据库中的数据提方便。
为了屏蔽数据的复杂性、简化用户对数据的操作、控制用户访问数据的权限、保护数据安全,常为不同的用户创建不同的视图。
1.视图的基本概念
视图是从一个或多个表或视图导出的表;其结构和数据是建立在对表的查询基础上的。
和表一样,视图也是包括几个被定义的数据列和多个数据行。
但就本质而言,这些数据列和数据行来源于其所引用的表。
所以,视图不是真实存在的基础表,而是一张虚表。
视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。
视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份。
通过视图看到的数据,只是存放在基本表中的数据。
对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)、删除。
当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。
可以将任何符合视图创建规定的SELCT语句命名和存储为视图。
在视图中北查询的表称为基表。
视图的常见实例如下。
●一个基表的行或列的于集。
●两个或多个表的合并。
●两个或多个表的联接。
●一个基表的统计总汇。
●另外一个视图的子集。
●视图和基表的混合。
2.创建视图
在SQLServer2008中创建视图,创建者必须拥有创建视图的权限,并且对视图中引用的基表或视图有许可权。
此外,创建视图前还应该注意以下几点:
●只能在当前数据库中创建视图。
如果使用分布式查询,视图所引用的基表和视图可以存在于其他数据库或其他服务器中。
●在一个视图中最多引用1024列,视图中记录的行数限制由基表中的记录数目决定。
●视图的名称必须遵循标识符的命名规则,且对每个架构都必须唯一,并且该名称不得与该架构包含的任何表的名称相同。
●视图中列的名称一般继承其基表中列的名称,如果视图中某―列是算术表达式、函数、常量或者来自多个表的列名相同,必须要为视图中的列定义名称。
●可以将视图创建在其他视图上,SQLServer2008中允许32层的视图嵌套。
●不能在视图上创建全文索引,不能将规则、畎认绑定在视图上。
●不能在临时表上创建视图,也不能创建临时视图。
●定义视图的查询语句中不能包含ORDERBY、COMPUTE、COMPUTEBY子句和INTO关键字。
(1)使用SSMS创建视图
例如,在studentdb数据库中,建立一个计算机系学生选课的视图,其操作步骤如下:
①启动SQLServerManagemnetStudio,在“对象资源管理器”中,依次展开“数据库”、“Studentdb”节点。
②右击“视图”节点,在弹出的快捷菜单中单击“新建视图”命令,如图1所示,打开如图2所示的“视图设计器”窗口和“添加表”窗口。
图1“新建视图”命令
图2“视图设计器”窗口和“添加表”对话框
③在“添加表”对话框中选择建立新视图的基表、视图和函数。
选择“student”、“sc”两个表,单击“添加”按钮(这里可以选择一张表单击一次添加,也可以按住【ctrl】键将需要的表选择好后,单击“添加”按钮),将表添加到“视图设计器窗口”中。
添加完毕后,关闭“添加表”对话框,回到如图3所示的“视图设计器”窗口。
如果关闭“添加表”对话框后,仍需要添加表,单击“视图设计器”窗口中的工具栏上的“添加表”按钮,即可打开“添加表”对话框。
④这时,所选的表出现在“视图设计器”窗口的关系窗格中。
根据新建视图的需要,从表中选择视图引用的列。
将列加入视图有如下三种方式,可以在关系图窗格中,勾选相应表的相应列左边的复选框来完成;也可以通过选择条件窗格中的“列”栏上的列名来完成,还可以在SQL窗格中输入SELECT语句来选择视图需要的列。
在此,依次勾选“student”表中的“sno”、“sname”、“sdept”和“sc”表中的“cno”、“Grade”列,其结果如图3所示。
⑤在条件窗格中的“筛选器”栏中设置过滤记录的条件。
本例中需要的条件为“sdept='CS'”。
⑥设置完毕后,在“视图设计器”窗口中,单击工具栏中的“验证SQL”语法按钮,检查SQL语法。
语法正确后,单击“执行SQL”按钮,预览视图返回的结果,如图3中的结果窗格所示。
图3“视图设计器”窗口
⑦测试正常后,单击工具栏中的“保存”按钮,弹出“选择名称”对话框,在该对话框中为视图命名,如“V_CSCourse”,单击“确定”按钮,将视图保存到数据库中。
(2)使用T-SQL语言创建视图
创建视图的语法如下:
CREATEVIEW视图名
AS
SELECT查询语句
例如,创建计算机系学生的视图。
在SQLServerManagementStudio中,单击工具栏上的“新建查询”按钮,打开SQL“查询编辑器”窗口,在其中输入如下代码:
USEstudentdb
GO
CREATEVIEWV_CS
AS
SELECTsno,sname,sage,sdept
FROMstudent
WHEREsdept='CS'
输入完成后,按【Ctrl+F5】键或单击工具栏上的“分析”按钮,检查输入的代码是否具有语法错误,检查通过后按【F5】键或单击工具栏上的“执行”按钮,消息窗口中返回“命令已成功完成”就表示视图创建成功。
然后在“对象资源管理器”窗口中,右击“数据库”节点,在弹出的快捷菜单中单击“刷新”命令,可以看到新创建的视图。
3.使用视图
定义视图后,可以对视图进行查询,在一定条件下还可以通过视图修改数据。
(1)通过视图查询数据信息
对于视图,可以像使用基表一样对其进行查询。
例如,查询计算机系学生视图的平均年龄。
USEstudentdb
GO
SELECTAVG(sage)
FROMV_CS
(2)通过视图修改数据
通过视图来修改基表中的数据,包含数据插入、数据删除和数据修改。
由于视图本身不实际存储数据,它只是显示一个或多个基表的查询结果,修改视图中的数据的实质是修改视图引用的基表中的数据。
因此,在使用视图修改数据时,要注意以下事项。
●不能在一个语句中对多个基表使用数据修改语句。
如果要修改由两个或两个以上基表得到的视图,必须进行多次修改,每次修改只能影响一个基表。
●对于基表中需更新而又不允许空值的所有列,它们的值在INSERT语句或DEFAULT定义中指定。
这将确保基表中所有需要值的列都可以获取值。
●不能修改那些通过计算得到结果的列。
●如果在视图定义中使用了WITHCHECKOPTION子句,则所有在视图上执行的数据修改语句都必须符合定义视图的SELECT语句中所设定的条件。
●在基表的列中修改的数据必须符合对这些列的约束条件,如是否为空、约束、DEFAULT定义等。
例,为计算机视图添加一条新的学生记录。
代码如下:
USEstudentdb
GO
INSERTINTOV_CS
VALUES('200301002','李明',21,'CS')
4.删除视图
对于不需要的视图,可以使用SSMS或者T-SQL语句中的DROPVIEW语句将其删除。
删除视图后,其所对应的数据不会受到影响。
如果有其他数据库对象是以此视图为基础建立的,仍可删除此视图,但是再使用那些数据库对象时,将会发生错误。
(1)使用DROPVIEW语句删除视图
其语法格式如下:
DROPVIEW{视图名}[,…n]
例,删除视图V_CS。
DROPVIEWV_CS
(2)使用SSMS删除视图
启动SQLServerManagemnetStudio,在“对象资源管理器”中,依次展开“数据库”、“视图所属数据库”、“视图”节点,右击需要删除的视图,在弹出的快捷菜单中选择“删除”命令,打开“删除对象”对话框。
在“删除对象”对话框中单击“确定”按钮,即可删除选定的视图。
二、索引
用户对数据库最频繁的操作就是进行数据查询。
一般情况下,数据库在进行查询操作时需要对整个表进行数据搜索。
当表中的数据很多时,搜索数据就需要很长的时间,这就造成了服务器的资源浪费。
为了提高检索数据的能力,数据库引入了索引机制。
1.索引的基本概念
(1)索引的概念
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引是依赖于表建立的,它提供了编排表中数据的内部方法。
一个表的存储由两部分组成:
一部分用来存放表的数据页面,另一部分用来存放索引页面。
索引就存放在索引页面上。
通常索引页面相对于数据页面来说小得多。
当进行数据检索时,系统先搜索索引页面,从中找出所需数据的指针,再直接通过指针从数据页面中读取数据。
从某种程度上,可以把数据库看作一本书,把索引看作书的目录。
通过目录査找书中的信息,显然较没有目录的书方便快捷。
索引可以提供对一个表中的数据的有效访问,它可以加速数据的检索和强制唯一性限制。
但是不应该在每一个列上都创建索引,因为构造索引需要占用一定的系统资源,降低系统的速度。
而且插入、删除或更新一个索引列的数据比非索引列的数据要花更长的时间。
(2)索引的存储结构
在SQLServer的数据库中,按存储结构的不同将索引分为两类:
聚集索引(ClusteredIndex)和非聚集索引(NonclusteredIndex)。
1)聚集索引
对表的物理数据页中的数据按列进行排序,然后再重新存储到磁盘上,即聚集索引与数据是混为一体的,其存储结构采用B-树结构来维护的,它的叶节点中存储的是实际的数据。
由于聚集索引对表中的数据一一进行了排序,因此,用聚集索引查找数据很快。
但由于聚集索引将表的所有数据完全重新排列了,它所需要的空间也就特别大,大概相当于表中数据所占空间的120%。
表的数据行只能以一种排序方式存储在磁盘上,所以一个表只能有一个聚集索引。
2)非聚集索引
非聚集索引具有与表的数据完全分离的结构。
使用非聚集索引,不用将物理数据页中的数据按照列排序,非聚集索引的B-树叶节点中存储了组成非聚集索引的关键字的值和行定位器。
行定位器的结构和存储内容取决于数据的存储方式。
如果数据是以聚集索引方式存储的,则行定位器中存储的是聚集索引的索引键;如果数据不是以聚集索引方式存储的,这种方式又称为堆存储方式(HeapStructure),则行定位器存储的是指向数据行的指针。
非聚集索引将行定位器按关键字的值,用一定的方式排序。
这个顺序与表的行在数据页中的排序是不匹配的。
由于非聚集索引使用索引页存储,因此它比聚集索引需要更多的存储空间,且检索效率较低,但一个表只能建立一个聚集索引,当用户需要建立多个索引时就需要使用非聚集索引了。
从理论上将一个表最多可以建立248个非聚集索引。
(3)索引键的组成
根据索引键的组成,可以将索引分为三种类型。
1)唯一索引
如果想让表内的数据在创建索引之后,所查询的数据不重复,可以创建唯一性的数据索引。
创建唯一索引之后,可确保表内的索引列中不包含重复的数据内容。
其实,唯一索引与创建表时的主键是类似的,索引可以不唯一,即多个行可以共享同一键值。
2)复合索引
在一个表中,通过连接或附接两个或多个列值而创建的索引。
要创建一个好的复合索引,必须清楚数据是如何被存取的。
3)覆盖索引
当索引中包含了需要的所有信息时,这个索引成为覆盖索引。
它的键值包含了满足查询条件的所有数据。
(4)建立索引的原则
使用索引要付出代价,因此,为表建立索引时,要根据实际情况,认真考虑哪些列应该建立索引,哪
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验六 视图和索引 实验指导 实验 视图 索引 指导