视图是从一个或几个基本表(或视图)导出的表。它与基本表不同。视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化,它可以和基本表一样被查询,被删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增,删,改)操作则有一定的限制。
1. 定义视图
(1) 创建视图
SQL语言CREATE VIEW命令建立视图,其一般格式为:
CREATE VIEW<视图名>[(<列名>[,<列名>]...)]
AS <子查询>
[WITH CHECK OPTION];
其中,子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短句。
WITH CHECK OPTION表示对视图进行UPDATE,INSERT和DELETE操作时要保证更新,插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
在下列三种情况下必须明确指定组成视图的所有列名:
a . 某个目标列不是单纯的属性名,而是聚集函数或列表达式。
b . 多表连接时选出了几个同名列作为视图的字段。
c . 需要在视图中为某个列启用新的更合适的名字。
RDBMS(关系数据库管理系统)执行CREATE VIEW语句的结果只是把视图的定义存入数据字典,并不执行其中的SELECT语句。只是在对视图查询时,才按视图的定义从基本表中将数据查出。
视图不仅可以创建在一个或多个基本表上,也可以创建在一个或多个已定义好的视图上,或建立在基本表与视图上。
(2) 删除视图
删除语句的格式为:
DROP VIEW <视图名> [CASCADE];
视图删除后视图的定义将从数据字典中删除。如果该视图上还导出了其他视图,则使用CASCADE级联删除语句,把该视图和由他导出的所有视图一起删除。
基本表删除后,由该基本表导出的所有视图(定义)没有删除,但均无法使用。删除这些视图(定义)需要显式的使用DROP VIEW语句。
2. 视图查询
关系数据库管理系统执行对视图的查询时,实现进行有效性检查。检查查询中涉及的表,视图等是否存在。如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。
3. 更新视图
更新视图是指通过视图来插入(INSERT),删除(DELETE)和修改(UPDATE)数据。
为防止用户通过视图对数据进行增加,删除,修改时,有意无意地对不属于视图范围内的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION子句。这样在视图上增加,删除,修改数据时,关系数据库管理系统会检查视图定义中的条件,若不满足条件,则拒绝执行该操作。
4. 视图的作用
合理使用视图能够带来许多好处:
(1) 视图能够简化用户的操作。
(2) 视图使用能以多种角度看待同一数据。
(3) 视图对重构数据库提供了一定程度的逻辑独立性。
(4) 视图能够对机密数据提供安全保护。
(5) 适当的使用视图可以更清晰的表达查询。