首批通过分布式安全可靠测评,为关键业务系统打造
CREATE VIEW
更新时间:2026-04-15 17:16:59
描述
该语句用于创建视图。
使用限制及注意事项
视图在数据库中实际上并不是以表的形式存在,视图是作为在
CREATE VIEW语句中指定的SELECT语句的结果而派生出来的,每次使用时视图就会派生。如果
FROM子句中引用了两个或多个表或视图,则称该视图为连接视图(Join View)。一个可更新的连接视图,也称为可修改的连接视图,涉及两个或多个基表或视图,并允许 DML 操作。可更新的视图不受限于WITH READ ONLY子句。为确保视图的可更新性,必须满足一系列特定条件。其中一项普遍适用的规则是,在对连接视图进行
INSERT、UPDATE或DELETE操作时,操作只能针对单个基表进行修改。
权限要求
执行 CREATE VIEW 语句,需要当前用户拥有 CREATE VIEW 权限。有关 OceanBase 数据库权限的详细介绍,参见 MySQL 模式下的权限分类。
语法
CREATE [OR REPLACE] VIEW view_name [(column_name_list)]
AS select_stmt
[view_check_option];
column_name_list:
column_name [, column_name ...]
view_check_option:
WITH [LOCAL | CASCADED] CHECK OPTION
参数解释
| 参数 | 描述 |
|---|---|
| OR REPLACE | 可选项,表示如果要创建的视图名称已存在,则使用新的定义重新创建视图,即替换已有的视图。 |
| view_name | 视图名称。 |
| column_name_list | 可选项,指定视图的列名列表。如果未指定列名列表,由 SELECT 语句检索的列名将用作视图列名。SELECT 语句检索的列可以是对表列的简单引用,也可以是使用函数、常量值、运算符等的表达式。视图列名有以下限制:
|
| select_stmt | 用于定义视图的查询(SELECT)语句。它给出了视图的定义,可以从基表或其他视图进行选择。有关查询语句的具体结构和选项信息,参见 SELECT 语句。 |
| view_check_option | 可选项,指定视图的检查范围,用来限制对视图的插入、更新操作。检查范围的详细介绍可参见下文 view_check_option。 |
view_check_option
WITH CHECK OPTION 是一种用于创建视图的语法,它用于确保插入或更新的数据满足视图的定义条件。WITH CHECK OPTION 子句还可以与 LOCAL/CASCADED 关键字一起使用,以进一步指定数据检查的范围。这两种关键字的区别在于数据检查的范围:
LOCAL:对本视图进行检查,是否对引用的视图进行检查取决于被引用视图的定义。CASCADED:默认值,对本视图进行检查,并递归地对引用的所有视图进行检查。
对于 V4.2.5 版本,从 V4.2.5 BP7 版本开始支持视图过滤条件(where_clause)包含子查询时指定 WITH CHECK OPTION 子句。
注意
当过滤条件中使用 WITH CHECK OPTION 子句时:
- MySQL 模式应确保创建语句不能是 “不可更新视图”。
- 视图定义中暂不支持使用
JOIN操作。
示例
创建测试表 test_tbl1 和 test_tbl2。
obclient> CREATE TABLE test_tbl1 (col1 INT, col2 VARCHAR(50), col3 INT);
obclient> CREATE TABLE test_tbl2 (col1 INT, col2 VARCHAR(50));
选择表
test_tbl1中的col1、col2列来创建视图v1_t1。obclient> CREATE OR REPLACE VIEW v1_t1 AS SELECT col1, col2 FROM test_tbl1;使用
WITH LOCAL CHECK OPTION创建视图v2_t1。obclient> CREATE OR REPLACE VIEW v2_t1 AS SELECT * FROM test_tbl1 WHERE col1 > 0 WITH LOCAL CHECK OPTION;使用
WITH CASCADED CHECK OPTION创建视图v3_t1。obclient> CREATE OR REPLACE VIEW v3_t1 AS SELECT * FROM test_tbl1 WHERE col1 > 1 WITH CASCADED CHECK OPTION;使用
WITH CHECK OPTION创建视图v4_t1。obclient> CREATE OR REPLACE VIEW v4_t1 AS SELECT * FROM test_tbl1 WHERE col1 > 10 WITH CHECK OPTION;在过滤条件子查询后指定
WITH CHECK OPTION子句。obclient> CREATE OR REPLACE VIEW v5_t1_t2 AS SELECT * FROM test_tbl1 t1 WHERE EXISTS (SELECT 1 FROM test_tbl2 t2 WHERE t2.col1 = t1.col1) WITH CHECK OPTION;