视图管理¶
视图是一种能显示一个或者多个表(视图)数据的特殊的数据库对象,它获取查询的结果集并把结果集当作一个表来处理。视图可以看作是“存储查询”或者“虚拟表”,在绝大多数情况下,视图可以被当作表来处理。下面将分别讨论视图的管理,主要内容包括:创建视图、删除视图、可更新视图。
同一模式下,表、索引、视图、序列不能同名。
- 创建视图
用户必须使用“CREATE VIEW”来创建视图。视图的定义是一个或者多个表(视图)上的查询。
下面的语句定义在表“PROJ”一个子集上。
CREATE VIEW DESIGN_PROJ AS
SELECT * FROM PROJ WHERE PTYPE = 'DESIGN' WITH CHECK OPTION;
上面的语句定义了只显示工程类型为'DESIGN'的工程。此外“WITH CHECK OPTION”选项给视图加上了一个约束条件:对该视图的INSERT, UPDATE操作不能产生一个从该视图SELECT不出来的行。举个例子,下面的语句将成功通过视图“DESIGN_PROJ”在表“PROJ”中插入元组。
INSERT INTO DESIGN_PROJ VALUES('2', 'DESIGN OSCAR', 'DESIGN', 100000, 'BEIJING');
而下面的这条语句试图在插入一条工程类型为'CODE'的行,这导致出现CHECK OPTION 失败错误,从而该语句被回滚。
INSERT INTO DESIGN_PROJ VALUES('2','CODE OSCAR', 'CODE ', 100000,'BEIJING');
关于CREATE VIEW 语句的使用,请参见《神通数据库 SQL语言参考手册》。
- 删除视图
只有视图的创建者,或者DBA 有权限使用DROP VIEW语句来删除视图。下面是一个简单的例子:
DROP VIEW DESIGN_PROJ;
- 可更新视图
更新视图是指那些可以执行UPDATE或者DELETE, 或者INSERT语句的视图,因此可更新视图又可以进一步细分为三类:可UPDATE视图,可DELETE视图和可INSERT视图。
并不是所有的视图都是可更新的,举例来说下面语句创建的视图就是一个不可更新视图。
CREATE VIEW CITY_PROJ_BUDGET AS
SELECT CITY, SUM(BUDGET) AS BUDGET
FROM PROJ GROUP BY CITY;
上述视图显示城市和该城市中所有工程预算总和,该视图不可更新,是因为视图定义中含有GROUP BY。
关于视图可更新的条件,请参见《神通数据库 SQL语言参考手册》。