第八章 --视图及其应用
8.1 视图综述
8.2 视图的操作
8.3 视图定义信息查询目录
8.4 案例中的视图运用第八章视图是一个虚拟表,其内容由查询定义 。
同真实的表一样,视图包含一系列带有名称的列和行数据 。 但是,视图并不在数据库中以存储的数据值集形式存在 。
行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成 。
对其中所引用的基础表来说,视图的作用类似于筛选 。 定义视图的筛选可以来自当前或其它数据库的一个或多个表,
8.1 视图综述第八章或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,
这种方式就很有用。
通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
8.1.1 视图的基本概念数据视图是另一种在一个或多个数据表上观察数据的途径,可以把数据视图看作是一个能把焦点定在用户感兴趣的数据上的监视器,用户看到的是实时数据 。
视图可以被看成是虚拟表或存储查询。可通过视图访问的数据不作为独特的对象存储在数据库内。数据库内存储的是 SELECT语句,SELECT
语句的结果集构成视图所返回的虚拟表。
第八章用户可以用引用表时所使用的方法,在 T-
SQL语句中通过引用视图名称来使用虚拟表。
在授权许可的情况下,用户还可以通过视图来插入、更改和删除数据在视图中被查询的表被称为,基表,视图常见的示例有:
1、基表的行和列的子集
2、两个或多个基表的连接
3、两个或多个基表的联合
4、基表和另一个视图或视图的子集的结合
5、基表的统计概要首先通过一个简单的实例来看看什么是视图 。 仍然使用前面章节所建立的数据库 。 假设教务科需要提供给各位老师所选自己课的学生名单 。 教师信息表和学生信息表已经存在如若在创建一张表,会造成信息重复使用使数据库冗余 。 这时就可以提取教师信息表和学生信息表中的相关列创建视图解决该问题 。
Use student
GO
CREATE VIEW VIEW1
第八章
AS
SELECT dbo.教师,教师编号,dbo.学生,
姓名,dbo.教师,专业,dbo.学生,专业代码
FROM dbo.教师 CROSS JOIN
dbo.学生这样,老师需要浏览所有选自己课的同学各年的学习成绩时,只需要执行查询语句:
SELECT * FROM VIEW1
合理使用视图能够带来以下好处:
1.视图能简化用户操作
2.视图使用户以多角度看待同一数据
3.视图对重构数据库提供了一定程度的逻辑独立性
4.视图能够对机密数据提供安全保护
8.1.2 视图的作用第八章
1.使用企业管理器创建视图首先运行,企业管理器,,展开数据库 student,右击,视图,节点,然后从快捷菜单中选择,新建视图,命令。
然后象设计 SELECT 查询一样设计视图。把需要建立视图用的基表拖入工作区,选择建立视图需要的列,单击 标志运行,就可以看到所创建的视图。
8.2 视图的操作第八章
8.2.1 创建视图
2.使用创建视图向导创建视图用向导创建的步骤如下:
展开服务器组,再展开要在其中创建视图的服务器
在,工具,菜单上单击,向导,命令。
展开,数据库,文件夹。
双击 "创建视图向导 "。
完成向导中的步骤。
可在 SQL Server2000中使用,查询分析器,用 Transact-SQL语句创建视图 。 创建视图的基本语法如下:
CREATE VIEW < 视图名 >[( <列名
>[,<列名 >]… ) ]
AS <子查询 >
[ WITH CHECK OPTION ]
其中参数含义:
( 1) 子查询,可以是任意复杂的
SELECT语句,但通常不许含有 ORDER
BY字句和 DISTINCT短语 。
3.使用 Transact-SQL语句创建视图第八章
( 2) 列名,是视图中的列名。可以在 SELECT 语句中指派列名。如果未指定 column,则视图列将获得与 SELECT 语句中的列相同的名称。
( 3) WITH CHECK OPTION:表示对视图进行 UPDATE,INSERT,
DELETE操作时要保证更新、插入、
删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
( 4)如果 CREATE VIEW 语句仅指定了视图名,省略了组成视图的各个属性列名,
则隐含该视图由子查询中的 SELECT子句目标列中的诸字段组成。但在下列三种情况下必须明确指定组成视图的所有列名:
·其中某个目标列不是单纯的属性名,而是函数或列表达式。
·多表连接时选出了几个同名列作为视图的字段
·需要在视图中为某个列启用新的名字第八章视图建立在基本表上的视图建立在视图上的视图建立在基本表和视图上的视图单表视图多表视图单视图上的视图多视图上的视图普通视图带表达式的视图分组视图行列子集视图带表达式的视图分组视图普通多表视图带表达式的视图分组视图普通单表视图带表达式的视图分组视图普通多表视图带表达式的视图分组视图概括起来视图主要有以下类型
8.2.2 重命名视图第八章重命名视图即更改视图名称或修改其定义 。 可以在不除去和重新创建视图的条件下,从而丢失与之相关联的权限 。 值得注意的是重命名视图时,
sysobjects表中有关该视图的信息将得到更新 。 重命名存储过程和视图后,
请清空过程高速缓存以确保所有相关的存储过程和视图都重新编译 。
重命名的方法有两种,其一在企业管理器中更改,其二用 Transact-SQL语句更改 。
在重命名视图时,请遵循以下原则:
I,要重命名的视图必须位于当前数据库中。
II.名称必须遵守标识符规则。
III.能重命名自己拥有的视图。
IV.据库所有者可以更改任何用户视图的名称。
为了对重命名视图的操作有个更好的理解,我们将通过下面的例子给大家一个直观的印象。
1,使用企业管理器重命名
展开服务器组,然后展开服务器 。
展开,数据库,文件夹,展开该视图所属的数据库,然后单击,视图,。
在详细信息窗格中,右击视图,然后单击,重命名,命令 。 如图 8.5。
输入视图的新名称 。
确认新名称 。
第八章
2,使用 Transact-SQL语句重命名
sp_rename 'object_name','new_name'
[,[ @objtype = ] 'object_type' ]
参数含义:
object_name:视图当前名称 。
new_name:是指定对象的新名称 。 new_name
必须是名称的一部分,并且要遵循标识符的规则 。 newname 是 sysname 类型,无默认值 。
object_type:是要重命名的对象的类型。
8.2.3 使用视图第八章
1.使用视图查询信息视图定义后,用户就可以像对基本表进行查询一样对视图进行查询 。 即前面章节介绍的表的查询操作一般都可以用于视图 。
DBMS执行对视图的查询时,首先检查有效性,检查查询涉及的表,
视图等是否在数据库中存在,
如果存在,则从数据字典中取出查询涉及的视图的定义,把定义中的子查询和用户对视图的查询结合起来,转换成对基本表的查询,然后再执行这个经过修改的查询 。
将对视图的查询转换为对基本表的查询的过程为视图的消解( view
resolution)。
1.2,使用视图修改数据更新视图包括插入 (INSERT),删除
(DELETE),修改 (UPDATE)三类操作 。
由于视图不是实际存储的虚表,因此对视图的更新,最终要转换为对基本表的更新 。
为防止用户通过视图对数据进行修改时,
无意或故意操作不属于视图范围内的基本数据时,可在定义视图时加上 WITH CHECK
OPTION的句子,这样在视图上修改数据时
DBMS会进一步检查视图定义中的条件,若不满足条件,则拒绝执行该操作 。
第八章修改数据的准则,
·SQL Server 必须能够明确地解析对视图所引用基表中的特定行所做的修改操作。不能在一个语句中对多个基础表使用数据修改语句。
因此,列在 UPDATE 或 INSERT 语句中的列必须属于视图定义中的同一个基表。
·对于基础表中需更新而又不允许空值的所有列,它们的值在 INSERT 语句或 DEFAULT 定义中指定。这将确保基础表中所有需要值的列都可以获取值。
在基础表的列中修改的数据必须符合对这些列的约束,如为空性、约束,DEFAULT 定义等。
视图建立好后,如果导出此视图的基本表被删除了,该视图将失效,
但一般不会被自动删除。删除视图的方法有两种,其一在企业管理器中删除,其二用 Transact-SQL语句删除。
1.使用企业管理器运行,企业管理器,展开,数据库,,
展开所选定的数据库,单击,视图,
选中所要删除的视图,如图 8.10所示。
单击右键点击,删除,,打开,除出对象,对话框。
8.2.4 删除视图第八章
2,使用 Transact-SQL语句删除视图通常需要显式地使用 DROP
VIEW语句进行 。 该语句格式为
DROPVIEW<视图名 >;
一个视图被删除后,由该视图导出的其他视图也将失效,用户应该使用 DROP VIEW语句将他们一一删除 。
第八章
【 例 8.10】 删除视图 v_stu。
DROP VIEW v_stu
执行此语句后,v_stu视图的定义将从数据字典中删除。由
v_stu视图导出的视图的定义虽然仍在数据字典中,但该视图已无法使用。因此应同时删除
8.3 视图定义信息查询第八章
8.3.1 使用企业管理器现在通过企业管理器查询中建立的视图 view1
运行,企业管理器,,展开数据库 student,双击,视图,图标,可以在,根目录控制台,
窗口中看到建立的视图 view1
8.3.2 通过执行系统存储过程查看视图的定义信息使用系统存储过程查看视图定义信息的命令语法如下:
EXEC SP_helptext objname
其中,objname为用户需要查看的视图名称 。
第八章
8.4 案例中的视图应用以下案例基于数据库 student,
1.创建计算机系的学生视图 view1。
2.给 view1加密取名为 view2。
3.向 view1中插入一个新的学生记录,其中学号为,姓名为岚明,
性别为女
4.删除 view1中学号为
010101001006 的记录
5、修改视图 view1中学号为
010101001006 的记录,将其姓名改为李锋。
6、查找 view1中所有的女生
7、查看 view1的视图定义
8、重名名 view1为 v_stu,
9、删除视图 v_stu。
谢谢各位同学!
返回主页