---
title: "CREATE VIEW - OceanBase 数据库 V4.3.4 | OceanBase 文档中心"
description: CREATE VIEW 描述 该语句用于创建视图，如果指定了 OR REPLACE 子句，该语句能够替换已有的视图。 视图在数据库中实际上并不是以表的形式存在，视图是作为在 CREATE VIEW 语句中指定的 SELECT 语句的结果而派生出来的，每次使用时视图就会派生。 如果 FROM 子句中引用了两个或多个表或…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.4

# CREATE VIEW

更新时间：2024-12-01 23:00:00

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.4/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/600.sql-statement-of-mysql-mode/2900.create-view-of-mysql-mode.md)  

## 描述

该语句用于创建视图，如果指定了 `OR REPLACE` 子句，该语句能够替换已有的视图。

视图在数据库中实际上并不是以表的形式存在，视图是作为在 `CREATE VIEW` 语句中指定的 `SELECT` 语句的结果而派生出来的，每次使用时视图就会派生。

如果 `FROM` 子句中引用了两个或多个表或视图，则称该视图为连接视图（Join View）。一个可更新的连接视图，也称为可修改的连接视图，涉及两个或多个基表或视图，并允许 DML 操作。可更新的视图不受限于 `WITH READ ONLY` 子句。

要实现可更新，视图必须满足多个条件。例如，其中一条通用规则就是对于连接视图的 `INSERT`、`UPDATE` 或 `DELETE` 操作一次只能修改一个基表。

## 语法

```sql
create_view_stmt:
  CREATE [OR REPLACE] VIEW view_name [(column_name_list)] AS select_stmt [WHERE condition WITH {LOCAL | CASCADED} CHECK OPTION];

column_name_list:
    column_name [, column_name ...]

```

## 参数解释

| **参数** | **描述** |
| --- | --- |
| OR REPLACE | 表示如果要创建的视图名称已存在，则使用新的定义重新创建视图。 |
| view_name | 视图名。 |
| select_stmt | 是一种 `SELECT` 语句。它给出了视图的定义。该语句可以从基表或其他视图进行选择。 |
| column_name_list | 视图必须具有唯一的列名，不得有重复，就像基表那样。缺省情况下，由 `SELECT` 语句检索的列名将用作视图列名。要想为视图列定义明确的名称，可使用可选的 `column_name_list` 子句，ID 之间使用逗号分隔。`column_name_list` 中的名称数目必须等于 `SELECT`语句检索的列数。`SELECT` 语句检索的列可以是对表列的简单引用。也可以是使用函数、常量值、运算符等的表达式。 |
| WHERE condition WITH CHECK OPTION | `WITH CHECK OPTION` 是一种用于创建视图的语法，它用于确保插入或更新的数据满足视图的定义条件。在 MySQL 模式中，`WITH CHECK OPTION` 子句还可以与 `LOCAL/CASCADED` 关键字一起使用，以进一步指定数据检查的范围。这两种关键字的区别在于数据检查的范围：   - `WITH LOCAL CHECK OPTION` ：对本视图进行检查，是否对引用的视图进行检查取决于被引用视图的定义。 - `WITH CASCADED CHECK OPTION` ：对本视图进行检查，并递归地对引用的所有视图进行检查。 |

## 示例

选择表 `t` 中的 `c1`、`c2` 列来创建视图 `v`。

```sql
obclient> CREATE OR REPLACE VIEW v(vc1, vc2) AS SELECT c1, c2 FROM t;

```

使用 `LOCAL CHECK OPTION` 创建视图 `view1`。

```sql
obclient> create table test99(a int);
Query OK, 0 rows affected (0.090 sec)

obclient> insert into test99 values(0), (1), (2), (3);
Query OK, 4 rows affected (0.046 sec)
Records: 4  Duplicates: 0  Warnings: 0

obclient> CREATE OR REPLACE VIEW view1 AS SELECT * FROM test99 WHERE a > 0 WITH LOCAL CHECK OPTION;
Query OK, 0 rows affected (0.065 sec)

```

使用 `CASCADED CHECK OPTION` 语法，基于视图 `view1` 创建视图 `view2`。

```sql
obclient> CREATE OR REPLACE VIEW view2 AS SELECT * FROM view1 WHERE a > 1 WITH CASCADED CHECK OPTION;
Query OK, 0 rows affected (0.073 sec)

```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
