视图

视图是从一个或者几个基本表(或视图)导出的表,是一个虚表,它与基本表不同。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍放在原来的基本表中,因此一旦基本表中的数据发生,从视图中查询出的数据也会改变。
总而言之,视图就像一个窗口,通过它可以看到数据中自己感兴趣的数据及其变化。

视图一经定义,就可以和基本表一样被查询、被删除,也可以在一个视图之上再定义新的视图,但是对于更新操作有一定的限制。

一、定义视图

1、建立视图

SQL语句为:
CREATE VIEW <视图名>[(<列名>[,<列名>]…)] AS<子查询> [WITH CHECK OPTION];
其中,子查询可以是任意的SELECT语句,是否有ORDER BY和DISTINCT短语取决于具体系统的实现。
WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(子查询中的条件表达式)。
组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。但在下列三种情况下必须明确指定组成视图的所有列名:
1)某个目标列不是单纯的属性名,而是聚集函数或列表达式;
2)多表连接时选出了几个同名列作为视图的字段;
3)需要在视图中为某个列启用新的更合适名字。
备注:关系数据库管理系统执行CREATE VIEW语句的结果只是把视图的定义数据字典,并不执行其中的SELECT语句。只是在对视图查询时,才按视图的定义从基本表中将数据查出。若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,则称这类视图为行列子集视图。

1)视图可以建立在单个基本表上;
2)视图可以建立在在多个基本表上;
3)视图可以建立在一个或多个已定义好的视图上;
4)视图可以建立在基本表与视图上。

定义表时,为了减少数据库中的冗余数据,表中只存放基本数据,由基本数据经过各种计算派生出的数据一般是不存储的。由于视图中的数据并不实际存储,所以定义视图时可以根据应用的需要设置一些派生属性列。这些派生属性由于在基本表中并不实际存在,也称它们为虚拟列,带虚拟列的视图也称为带表达式的视图。带有聚集函数和GROUP BY子句的查询来定义的视图称为分组视图。

修改基本表之后要删除由该基本表导出的视图,然后重建这个视图,这样会避免基本表与视图的映像关系被破坏。

二、删除视图

格式为:DROP VIEW <视图名> [CASCADE];视图删除后视图的定义将从数据字典中删除,如果该视图上还导出了其他视图,则使用CASCADE级联删除语句把该视图和由它导出的所有视图一起删除。 基本表删除后,由该基本表导出的所有视图均无法使用,但是视图的定义没有从字典中清楚。删除这些视图定义需要显示地使用DROP VIEW语句。

三、查询视图

视图消解:关系数据库管理系统执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。
定义视图并查询视图与基于派生表的查询的有区别的。视图一旦定义,其定义将用于保存在数据字典中,之后的所有查询都可以直接引用该视图,而派生表只是在语句执行时临时定义,语句执行后该定义即被删除。

四、更新视图

更新视图是指通过视图插入(INSERT)、删除(DELETE)和修改(UPDATE)数据。由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。像查询视图那样,对视图的更新操作也是通过视图消解,转换为基本表的更新操作。为防止用户通过视图对数据增加、删除、修改时,有意无意地对不属于视图范围范围内的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION子句。这样在视图上增、删、改数据时,关系数据库管理系统会检查视图定义中的条件,若不满足条件则拒绝执行操作。
在关系数据库中,有些视图的更新不能唯一地有意义地转换成对相应基本表的更新,索引不是所有的视图是可更新的。
一般行列子集视图是可更新的,而且各个系统对视图的更新还有更进一步的规定。

不可更新的视图与不允许更新的视图是两个不同的概念。前者理论上已证明是不可更新的视图。后者指实际系统中不支持其更新,但它本身有可能是可更新的视图。

五、视图的作用

视图最终是定义在基本表之上的,对视图的一切操作最终也要转换为对基本表的操作,而且对于非行列子集视图进行查询或更新时还有可能出现问题。合理使用视图能够带来的好处如下:

  1. 视图能够简化用户的操作,图机制使用户可以将注意力集中在所关心的数据上;
  2. 视图使用户能以多种角度看待同一数据;
  3. 视图对重构数据库提供了一定程度的逻辑独立性;
  4. 视图能够对机密数据提供安全保护;
  5. 适当利用视图可以更清晰地表达查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值