实验六 视图和索引 实验指导
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六视图和索引实验指导
一、视图
视图是SQL Server中重要的数据库对象。视图常用于集中、简化和定制显示数据库的数据信息,为用户从多种角度观察数据库中的数据提方便。为了屏蔽数据的复杂性、简化用户对数据的操作、控制用户访问数据的权限、保护数据安全,常为不同的用户创建不同的视图。
1. 视图的基本概念
视图是从一个或多个表或视图导出的表;其结构和数据是建立在对表的查询基础上的。和表一样,视图也是包括几个被定义的数据列和多个数据行。但就本质而言,这些数据列和数据行来源于其所引用的表。所以,视图不是真实存在的基础表,而是一张虚表。视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。
视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份。通过视图看到的数据,只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)、删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。
可以将任何符合视图创建规定的SELCT语句命名和存储为视图。在视图中北查询的表称为基表。
视图的常见实例如下。
●一个基表的行或列的于集。
●两个或多个表的合并。
●两个或多个表的联接。
●一个基表的统计总汇。
●另外一个视图的子集。
●视图和基表的混合。
2. 创建视图
在SQL Server2008中创建视图,创建者必须拥有创建视图的权限,并且对视图中引用的基表或视图有许可权。此外,创建视图前还应该注意以下几点:
●只能在当前数据库中创建视图。如果使用分布式查询,视图所引用的基表和视图可
以存在于其他数据库或其他服务器中。
●在一个视图中最多引用1024列,视图中记录的行数限制由基表中的记录数目决定。
●视图的名称必须遵循标识符的命名规则,且对每个架构都必须唯一,并且该名称不
得与该架构包含的任何表的名称相同。
●视图中列的名称一般继承其基表中列的名称,如果视图中某―列是算术表达式、函
数、常量或者来自多个表的列名相同,必须要为视图中的列定义名称。
●可以将视图创建在其他视图上,SQL Server2008中允许32层的视图嵌套。
●不能在视图上创建全文索引,不能将规则、畎认绑定在视图上。
●不能在临时表上创建视图,也不能创建临时视图。
●定义视图的查询语句中不能包含ORDER BY、COMPUTE、COMPUTE BY子句和
INTO关键字。
(1)使用SSMS创建视图
例如,在studentdb数据库中,建立一个计算机系学生选课的视图,其操作步骤如下:
①启动SQL Server Managemnet Studio,在“对象资源管理器”中,依次展开“数据库”、“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中的结果窗格所示。
关系图窗格
条件窗格
SQL窗格
结果窗格
图3 “视图设计器”窗口
⑦测试正常后,单击工具栏中的“保存”按钮,弹出“选择名称”对话框,在该对话框中为视图命名,如“V_CSCourse”,单击“确定”按钮,将视图保存到数据库中。
(2)使用T-SQL语言创建视图
创建视图的语法如下:
CREATE VIEW 视图名
AS
SELECT 查询语句
例如,创建计算机系学生的视图。
在SQL Server Management Studio 中,单击工具栏上的“新建查询”按钮,打开SQL“查询编辑器”窗口,在其中输入如下代码:
USE studentdb
GO
CREATE VIEW V_CS
SELECT sno,sname,sage,sdept
FROM student
WHERE sdept='CS'
输入完成后,按【Ctrl+F5】键或单击工具栏上的“分析”按钮,检查输入的代码是否具有语法错误,检查通过后按【F5】键或单击工具栏上的“执行”按钮,消息
窗口中返回“命令已成功完成”就表示视图创建成功。然后在“对象资源管理器”窗口中,右击“数据库”节点,在弹出的快捷菜单中单击“刷新”命令,可以看到新创建的视图。
3. 使用视图
定义视图后,可以对视图进行查询,在一定条件下还可以通过视图修改数据。
(1)通过视图查询数据信息
对于视图,可以像使用基表一样对其进行查询。
例如,查询计算机系学生视图的平均年龄。
USE studentdb
GO
SELECT AVG(sage)
FROM V_CS
(2)通过视图修改数据
通过视图来修改基表中的数据,包含数据插入、数据删除和数据修改。由于视图本身不实际存储数据,它只是显示一个或多个基表的查询结果,修改视图中的数据的实质是修改视图引用的基表中的数据。因此,在使用视图修改数据时,要注意以下事项。
●不能在一个语句中对多个基表使用数据修改语句。如果要修改由两个或两个以上
基表得到的视图,必须进行多次修改,每次修改只能影响一个基表。
●对于基表中需更新而又不允许空值的所有列,它们的值在INSERT语句或
DEFAULT定义中指定。这将确保基表中所有需要值的列都可以获取值。
●不能修改那些通过计算得到结果的列。
●如果在视图定义中使用了WITH CHECK OPTION子句,则所有在视图上执行的数
据修改语句都必须符合定义视图的SELECT语句中所设定的条件。
●在基表的列中修改的数据必须符合对这些列的约束条件,如是否为空、约束、
DEFAULT定义等。
例,为计算机视图添加一条新的学生记录。代码如下:
USE studentdb