数据库视图

数据库视图

视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。

  1. 建立视图
    sql语言用CREATE VIEW命令建立视图,其一般格式为:

    1
    2
    3
    CREATE VIEW <视图名> [(<列名>[,<列名>]...)]
    AS <子查询>
    [WITH CHECK OPTION]

    其中,子查询可以是任意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,取决于具体系统的实现。WITH CHECK OPTION表示对视图进行UPDATE, INSERT,和DELETE操作时要保证更新,插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式),组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成,但在下列情况下必须明确指定组成视图的所有列名。

    1) 某个目标列不是单纯的属性名,而是聚集函数或列表达式
    2) 多表连接时选出了几个同名列作为视图的字段
    3) 需要在视图中为某个列启用新的更合适的名字

若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,则称这类视图为行列子集视图
还可以用带有聚集函数和group by 子句的查询来定义视图,这种视图称为分组视图

1
2
3
4
5
CREATE VIEW S_G(Sno Gavg)
AS
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;

  1. 删除视图
    语句为 DROP VIEW <视图名> [CASCADE] ,视图删除后视图的定义将从数据字典中删除。如果该视图上还导出了其它视图,则使用CASCADE级联删除语句把该视图和由它导出的所有视图一起删除。

    1
    DROP VIEW BT_S CASCADE;
  2. 查询视图
    关系数据库管理系统执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表,视图等是否存在。如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转化成等价的对基本表的查询,然后再执行修正了的查询。这一转换过程称为视图消解

  3. 更新视图
    更新视图是通过视图来插入(insert),删除(delete)和修改(update)数据。由于视图是不实际存储数据的虚表,因此对视图的更新最终要转化为对基本表的更新。像查询视图一样,对视图的更新操作也是通过视图消解,转化为对基本表的更新操作。
    为防止用户通过视图对数据进行增加,删除,修改时,有意无意地对不属于视图范围的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION子句,这样在视图上增,删,改数据时,关系数据库管理系统会检查视图定义中的条件,若不满足条件则拒绝执行该操作。

  4. 视图的作用

    • 视图能够简化用户的操作
    • 视图使用户能以多种角度看待同一数据
    • 视图对重构数据库提供了一定程度的逻辑独立性
    • 视图能够对机密数据提供安全保护
    • 适当利用视图可以更清晰地表达查询