CREATE VIEW 定义一个查询的视图。这个视图不是物理上实际存在的,并且在该视图每次被引用的时候都会运行一次 query
CREATE OR REPLACE VIEW 类似,不过是如果一个同名的视图已经存在,那么将替换它。你只能用一个生成相同字段的新查询替换一个视图(字段名和数据类型都相同)。
如果给出了一个模式名(比如 CREATE VIEW myschema.myview ...),那么该视图将在指定的模式中创建,否则将在当前模式中创建。临时视图存在于一个特殊的模式里,所以创建临时视图的时候,不用给出模式名。新视图名字必需和同一模式中任何其它视图、表、序列、索引的名字不同。
目前,视图是只读的:系统将不允许在视图上插入、更新、删除数据。你可以通过在视图上创建把插入等动作重写为向其它表做合适操作的规则来实现可更新视图的效果。更多信息详见 CREATE RULE 。
使用 DROP VIEW 语句删除视图。
请注意视图字段的名字和类型不一定是你们期望的那样。比如,
CREATE VIEW vista AS SELECT 'Hello World';
在两个方面很糟糕:字段名缺省是 ?column? 并且字段的数据类型缺省是 unknown 。如果你想视图的结果是一个字符串文本,那么请像下面这样使用
CREATE VIEW vista AS SELECT text 'Hello World' AS hello;
对视图引用的表的访问的权限由视图的所有者决定。不过,在视图里调用的函数当作他们直接从使用视图的查询里调用看待。因此,视图的用户必须有使用视图调用的所有函数的权限。
SQL 标准为 CREATE VIEW 声明了一些附加的功能:
CREATE VIEW name [ ( column_name [, ...] ) ] AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
完整的 SQL 命令可选的子句是:
这个选项用于可更新视图。所有对视图的 INSERT 和 UPDATE 都要经过视图定义条件的校验。也就是说,新数据应该可以通过视图看到。如果没有通过校验,更新将被拒绝。
对这个视图进行完整性检查
对此视图和任何相关视图进行完整性检查。在既没有声明 CASCADED 也没有声明 LOCAL 时,假设为 CASCADED 。
CREATE OR REPLACE VIEW 是 PostgreSQL 的扩展。临时视图的概念也是扩展。