CREATE VIEW - 定义一个视图

SYNOPSIS

CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query

DESCRIPTION 描述

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

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

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

PARAMETERS 参数

name
 所要创建的视图名称(可以有模式修饰)。
column_name
 一个可选的名字列表,用于当作视图的字段名。如果没有给出, 字段名取自查询。
query
 一个将为视图提供行和列的查询(也就是一条 SELECT 语句)。

请参阅 SELECT [select(7)] 获取有效查询的更多信息。

NOTES 注意

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

使用 DROP VIEW 语句删除视图

请注意视图字段的名字和类型不一定是你们期望的那样。比如,

CREATE VIEW vista AS SELECT ‘Hello World‘;

在两个方面很糟糕:字段名缺省是 ?column?,并且字段的数据类型缺省是 unknown。 如果你想视图的结果是一个字串文本,那么用类似下面这样的东西

CREATE VIEW vista AS SELECT text ‘Hello World‘ AS hello;

对视图引用的表的访问的权限由视图的所有者决定。 不过,在视图里调用的函数当作他们直接从使用视图的查询里调用看待。 因此,视图的用户必须有使用视图调用的所有函数的权限。

EXAMPLES 例子

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

CREATE VIEW comedies AS
    SELECT *
    FROM films
    WHERE kind = ‘Comedy‘;

COMPATIBILITY 兼容性

SQL 标准为 CREATE VIEW 声明了一些附加的功能:

CREATE VIEW name [ ( column [, ...] ) ]
    AS query
    [ WITH [ CASCADE | LOCAL ] CHECK OPTION ]

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

CHECK OPTION
 这个选项用于可更新视图。 所有对视图的INSERT和UPDATE都要经过视图定义条件的校验。 (也就是说,新数据应该可以通过视图看到。)如果没有通过校验,更新将被拒绝。

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

CREATE OR REPLACE VIEW 是 PostgreSQL 的扩展。

原文地址:https://www.cnblogs.com/fanweisheng/p/11080713.html

时间: 2024-07-31 18:09:21

CREATE VIEW - 定义一个视图的相关文章

CREATE RULE - 定义一个新的重写规则

SYNOPSIS CREATE [ OR REPLACE ] RULE name AS ON event TO table [ WHERE condition ] DO [ INSTEAD ] { NOTHING | command | ( command ; command ... ) } DESCRIPTION 描述 CREATE RULE 定义一个适用于特定表或者视图的新规则. CREATE OR REPLACE RULE 要么是创建一个新规则, 要么是用一个同表上的同名规则替换现有规则.

CREATE FUNCTION - 定义一个新函数

SYNOPSIS CREATE [ OR REPLACE ] FUNCTION name ( [ argtype [, ...] ] ) RETURNS rettype { LANGUAGE langname | IMMUTABLE | STABLE | VOLATILE | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT | [EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY

CREATE OPERATOR - 定义一个新的操作符

SYNOPSIS CREATE OPERATOR name ( PROCEDURE = funcname [, LEFTARG = lefttype ] [, RIGHTARG = righttype ] [, COMMUTATOR = com_op ] [, NEGATOR = neg_op ] [, RESTRICT = res_proc ] [, JOIN = join_proc ] [, HASHES ] [, MERGES ] [, SORT1 = left_sort_op ] [,

CREATE SCHEMA - 定义一个新的模式

SYNOPSIS CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ] CREATE SCHEMA AUTHORIZATION username [ schema_element [ ... ] ] DESCRIPTION 描述 CREATE SCHEMA 将在当前数据库里输入一个新的模式. 该模式名将在当前数据库里现存的所有模式名中唯一. 模式实际上是一个名字空间: 它包含命名对象(表,数据

CREATE TABLE - 定义一个新表

SYNOPSIS CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name ( { column_name data_type [ DEFAULT default_expr ] [ column_constraint [, ... ] ] | table_constraint | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ] )

CREATE DOMAIN - 定义一个新域

SYNOPSIS CREATE DOMAIN name [AS] data_type [ DEFAULT expression ] [ constraint [ ... ] ] where constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK (expression) } DESCRIPTION 描述 CREATE DOMAIN 创建一个新的数据域. 定义域的用户成为其所有者. 如果给出一个模式名称(比如,

CREATE INDEX - 定义一个新索引

SYNOPSIS CREATE [ UNIQUE ] INDEX name ON table [ USING method ] ( { column | ( expression ) } [ opclass ] [, ...] ) [ WHERE predicate ] DESCRIPTION 描述 CREATE INDEX 在指定的表上构造一个名为 index_name 的索引.索引主要用来提高数据库性能.但是如果不恰当的使用将导致性能的下降. 索引的键字字段是以字段名的方式声明的,或者是可选

CREATE GROUP - 定义一个新的用户组

SYNOPSIS CREATE GROUP name [ [ WITH ] option [ ... ] ] where option can be: SYSID gid | USER username [, ...] DESCRIPTION 描述 CREATE GROUP 将在数据库集群上创建一个新组. 要使用这条命令,你必须是数据库超级用户. 使用 ALTER GROUP [alter_group(7)]  修改组成员,DROP GROUP [drop_group(7)] 删除一个组. PA

Oracle视图 create View

视图是一种虚表,使用CREATE VIEW语句来定义视图,该视图是基于一个或多个表或视图的逻辑表.一个视图本身不包含任何数据, 视图所基于的表称为基表. 视图就相当于一条select 语句,定义了一个视图就是定义了一个sql语句, 视图不占空间,使用视图不会提高性能,但是能简化sql语句 . 创建视图: create view 视图名; 如: create or replace view  v_test  as select * from test where age=10; create or