CREATE VIEW
CREATE VIEW — 定义一个新视图
大纲
CREATE [ OR REPLACE ] VIEWview[ (column name list) ] AS SELECTquery
输入
view要创建的视图名称(可以带模式限定)。
column name list一个可选的名称列表,用作视图的列。如果给出,这些名称会覆盖本应从 SQL 查询推导出的列名。
query一条 SQL 查询(即
SELECT语句),它将提供视图的列和行。关于有效参数的更多信息,参见SELECT。
输出
CREATE VIEW视图创建成功时返回的消息。
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 规则)来支持对视图的
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 VIEWview[column[, ...] ] AS SELECTexpression[ AScolname] [, ...] FROMtable[ WHEREcondition] [ WITH [ CASCADE | LOCAL ] CHECK OPTION ]
完整 SQL92 命令的可选子句有:
- CHECK OPTION
此选项与可更新视图有关。视图上的所有
INSERT和UPDATE命令都会被检查,以确保数据满足定义视图的条件。如果不满足,更新将被拒绝。- LOCAL
在该视图上检查完整性。
- CASCADE
在该视图以及任何依赖视图上检查完整性。如果既未指定 CASCADE 也未指定 LOCAL,则假定使用 CASCADE。
CREATE OR REPLACE VIEW 是一种
PostgreSQL
语言扩展。