VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

CREATE VIEW

功能描述

创建一个视图。视图与基本表不同,是一个虚拟的表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。

注意事项

  • 被授予CREATE ANY TABLE权限的用户,可以在public模式和用户模式下创建视图。
  • 不可与同一模式下已存在的synonym产生命名冲突。

语法格式

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ FORCE | NOFORCE ] [DEFINER = user] [SQL SECURITY { DEFINER | INVOKER }] 
VIEW view_name [ ( column_name [, ...] ) ]
[ WITH ( {view_option_name [= view_option_value]} [, ... ] ) ]
AS query [ WITH {{ [ CASCADED | LOCAL ] CHECK OPTION } | READ ONLY}];
  • 创建视图时使用WITH(security_barrier)可以创建一个相对安全的视图,避免攻击者利用低成本函数的RAISE语句打印出隐藏的基表数据。
  • 当视图创建后,不允许使用REPLACE修改本视图当中的列名,也不允许删除列。

参数说明

  • OR REPLACE

    当CREATE VIEW语句中存在OR REPLACE时,表示若以前存在该视图就进行替换,但新查询不能改变原查询的列定义,包括顺序、列名、数据类型、类型精度等,只可在列表末尾添加其他的列。

  • [DEFINER = user]

    指定user作为视图的属主。该选项仅在MySQL兼容模式下可用。

    支持指定definer为current_user。

  • [SQL SECURITY { DEFINER | INVOKER }]

    SQL SECURITY语法可以为视图添加安全属性。

    该选项仅在MySQL兼容模式下可用,参考MySQL兼容性手册:CREATE VIEW

  • TEMP | TEMPORARY

    创建临时视图。

  • view_name

    要创建的视图名称。可以用模式修饰。

    取值范围:字符串,符合标识符命名规范。

  • column_name

    可选的名称列表,用作视图的字段名。如果没有给出,字段名取自查询中的字段名。

    取值范围:字符串,符合标识符命名规范。

  • view_option_name [= view_option_value]

    该子句为视图指定一个可选的参数。

    目前view_option_name支持的参数仅有security_barrier,当VIEW试图提供行级安全时,应使用该参数。

    取值范围:Boolean类型,TRUE、FALSE

  • query

    为视图提供行和列的SELECT或VALUES语句。

  • WITH [ CASCADED | LOCAL ] CHECK OPTION

    该选项控制自动更新视图的行为,对视图的insert和update,要检查确保新行满足视图定义的条件,即新行可以通过视图看到。如果没有通过检查,则拒绝修改。如果没有添加该选项,则允许通过对视图的insert和update来创建该视图不可见的行。支持下列检查选项:

    • LOCAL

      只检查视图本身直接定义的条件,除非底层视图也定义了CHECK OPTION,否则它们定义的条件都不检查。

    • CASCADED

      检查该视图和所有底层视图定义的条件。如果仅声明了CHECK OPTION,没有声明LOCAL和CASCADED,默认是CASCADED。

    • 只有在可自动更新、没有INSTEAD OF触发器或者INSTEAD规则的视图上才支持CHECK OPTION。如果一个自动更新的视图被定义在一个具有INSTEAD OF触发器的视图上,那么CHECK OPTION可以被用来检查该自动更新视图上的条件,但具有INSTEAD OF触发器的视图上的条件不会被检查。如果该视图或者任何底层关系具有导致INSERT或UPDATE命令被重写的INSTEAD规则,那么在被重写的查询中将忽略所有检查选项,包括任何来自定义在有STEAD规则关系上的可自动更新视图的检查。
    • 基于MySQL外表的视图不支持CHECK OPTION选项。
  • with read only

    指定此选项将被标记为只读视图。

    此功能仅在Oracle兼容模式下可用,参见CREATE VIEW创建只读视图

示例

1、创建字段spcname为pg_default组成的视图。

CREATE VIEW myView AS SELECT * FROM pg_tablespace WHERE spcname = 'pg_default';

2、查看视图。

SELECT * FROM myView ;

返回结果如下:

  spcname   | spcowner | spcacl | spcoptions | spcmaxsize | relative | spcthreshold
------------+----------+--------+------------+------------+----------+--------------
 pg_default |       10 |        |            |            | f        |
(1 row)

3、删除视图myView。

DROP VIEW myView;

相关链接

ALTER VIEWDROP VIEW