CREATE VIEW

Name

CREATE VIEW  --  定义一个视图

Synopsis

CREATE [ OR REPLACE ] VIEW view [ ( column name list ) ] AS SELECT query
  

输入

view

所要创建的视图名称(可以有模式修饰).

query

一个将为视图提供行和列的 SQL 查询(也就是一条 SELECT 语句).

请参阅 SELECT 获取有效参数的更多信息.

输出

CREATE

如果视图创建成功,返回此信息.

ERROR: Relation 'view' already exists

如果在数据库中已经存在所声明的视图.

WARNING: Attribute 'column' has an unknown type

如果不声明,所创建的视图将有一个未知类型的字段. 例如,下面命令返回一个警告:

CREATE VIEW vista AS SELECT 'Hello World'
	

然而下面命令将不出现警告:

CREATE VIEW vista AS SELECT text 'Hello World'
	

描述

CREATE VIEW 定义一个查询的视图. 这个视图不是物理上实际存在(于磁盘)的.具体的说,自动生成 一个改写索引规则( 一个 ON SELECT 规则) 的查询用以支持在视图上的检索.

CREATE OR REPLACE VIEW 类似,不过是如果一个同名 的视图已经存在,那么就替换它。你只能用一个生成相同字段的新查询替换 一个视图(也就是说,同样字段名和数据类型)。

如果给出了一个模式名(比如,CREATE VIEW myschema.myview ...),那么该视图是在指定的模式中创建的. 否则它是在当前模式中创建的(在搜索路径前面的那个; 参阅 CURRENT_SCHEMA()).该视图名字必需和同一模式中任何其它 视图,表,序列或者索引的名字不同.

注意

目前,视图是只读的∶系统将不允许在视图上插入,更新,或者删除数据. 你可以通过在视图上创建把插入等动作重写为向其它表做合适操作的规则来 实现可更新视图的效果.更多信息详见 CREATE RULE

使用 DROP VIEW 语句删除视图.

用法

创建一个由所有 Comedy (喜剧)电影组成的视图:

CREATE VIEW kinds AS
    SELECT *
    FROM films
    WHERE kind = 'Comedy';

SELECT * FROM kinds;

 code  |           title           | did | date_prod  |  kind  | len
-------+---------------------------+-----+------------+--------+-------
 UA502 | Bananas                   | 105 | 1971-07-13 | Comedy | 01:22
 C_701 | There's a Girl in my Soup | 107 | 1970-06-11 | Comedy | 01:36
(2 rows)
   

兼容性

SQL92

SQL92 为 CREATE VIEW 声明了一些附加的功能:

CREATE VIEW view [ column [, ...] ]
    AS SELECT expression [ AS colname ] [, ...]
    FROM table [ WHERE condition ]
    [ WITH [ CASCADE | LOCAL ] CHECK OPTION ]
   

完整的SQL92命令可选的子句是:

CHECK OPTION

这个选项用于可更新视图. 所有对视图的INSERTUPDATE都要经过视图定义条件的校验. 如果 没有通过校验,更新将被拒绝.

LOCAL

对这个视图进行完整性检查.

CASCADE

对此视图和任何相关视图进行完整性检查. 在既没有声明 CASCADE 也没有声明 LOCAL 时,假设为 CASCADE.

CREATE OR REPLACE VIEWPostgreSQL 的扩展。