CREATE VIEW 语句

使用 CREATE VIEW 语句创建新的视图,该视图基于驻留在数据库(或本地数据库服务器或不同的数据库服务器中的另一个数据库)中的一个或多个现有表和视图。

语法

元素 描述 限制 语法
column 在此处声明的视图中的列的名称。缺省值是 SELECT 投影列表中的名称。 请参阅命名视图列 标识符
owner 视图的所有者。如果省略,缺省为发出此语句的用户 ID 。 要指定另一个用户 ID 需要 DBA 存取权限。 所有者名称
row_type 已归类的视图的已命名行类型 必须已经在数据库中存在 数据类型
view 在此处声明的视图名称 在数据库中的视图、表、序列和同义词名称中必须唯一。 标识符

用法

视图是虚拟的表,由 SELECT 语句定义。除了以下列表中列出的语句,您可以在任何表名称在语法上有效的 SQL 语句中指定视图的名称或同义词:
  • ALTER FRAGMENT
  • CREATE INDEX
  • CREATE TABLE
  • CREATE TRIGGER
  • RENAME TABLE
  • START VIOLATIONS TABLE
  • STOP VIOLATIONS TABLE
  • TRUNCATE
  • UPDATE STATISTICS
当您使用 CREATE TRIGGER 语句在视图上定义 INSTEAD OF 触发器时必须指定视图的名称,但是此语法和功能与定义在表上的触发器不同。

通过视图更新禁止在 INSERT 、DELETE 或 UPDATE 语句中使用非可更新视图(其中其它视图是有效的)。

要创建视图,您必须拥有对从中派生视图的所有列的 Select 特权。您可以如同表一样查询视图,并且在以下情况下可如同表一样更新视图,但视图并不是表。

如果您包含可选的 IF NOT EXISTS 关键字,当指定名称的视图已经在当前数据库中注册过,或者指定名称是当前数据库中表、同义词或序列对象的标识符,则数据库服务器不会执行任何操作(而不是向应用程序发送异常)。

视图是由视图定义中的 SELECT 语句在每次查询中引用该视图时返回的行和列的集合组成。

在一些情况下,数据库服务器将用户的 SELECT 语句同定义视图的 SELECT 语句合并,然后执行组合语句。在其它情况下,如果视图定义的复杂性导致数据库服务器创建了一个临时表(称为实现的视图)。有关实现的视图的更多信息,请参阅 GBase 8s 性能指南

视图反映了对底层表的更改,但是有两个例外:
  • 如果 SELECT * 规范定义了视图,则视图中只有那些在由 CREATE VIEW 定义视图时存在于底层表中的列。随后使用 ALTER TABLE 语句添加到底层表的任何新的列不会出现在该视图中。
  • 如果 GRANT 或 REVOKE 语句修改了视图定义中引用的表上的自由访问权,则数据库服务器不会将这些存取特权应用到视图上。
要强制将对基础表的访问权限或模式的修改应用于视图,你可以使用 DROP VIEW 和 CREATE VIEW 语句删除并重建此视图。还可以使用 CREATE VIEW 和 CREATE TRIGGER 语句分别重建 DROP VIEW 语句销毁的任何相关视图或 INSTEAD OF 触发器。

视图继承了从中派生视图的表的列的数据类型。数据库服务器通过表达式的特性确定虚拟列的数据类型。

SELECT 语句存储于 sysviews 系统目录表中。当您随后在另一个语句中引用视图的时候,数据库服务器会在执行新语句的同时执行定义 SELECT 语句的操作。

DB-Access 中,如果在 CREATE SCHEMA 语句外创建视图,那么在使用 -ansi 标志或设置 DBANSIWARN 环境变量的情况下,将会收到警告。

下面的语句创建一个基于 person 表的视图。创建类似这样的没有 OF TYPE 子句的视图时,该视图称为未归类的视图
CREATE VIEW v1 AS SELECT * FROM person;
1 请参阅 视图定义中有效的 SELECT 语句的子集