首批通过分布式安全可靠测评,为关键业务系统打造
CREATE VIEW
更新时间:2024-12-01 23:00:00
描述
该语句用于创建视图,如果指定了 OR REPLACE 子句,该语句能够替换已有的视图。
视图在数据库中实际上并不是以表的形式存在,视图是作为在 CREATE VIEW 语句中指定的 SELECT 语句的结果而派生出来的,每次使用时视图就会派生。
如果 FROM 子句中引用了两个或多个表或视图,则称该视图为连接视图(Join View)。一个可更新的连接视图,也称为可修改的连接视图,涉及两个或多个基表或视图,并允许 DML 操作。可更新的视图不受限于 WITH READ ONLY 子句。
要实现可更新,视图必须满足多个条件。例如,其中一条通用规则就是对于连接视图的 INSERT、UPDATE 或 DELETE 操作一次只能修改一个基表。
语法
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 关键字一起使用,以进一步指定数据检查的范围。这两种关键字的区别在于数据检查的范围:
|
示例
选择表 t 中的 c1、c2 列来创建视图 v。
obclient> CREATE OR REPLACE VIEW v(vc1, vc2) AS SELECT c1, c2 FROM t;
使用 LOCAL CHECK OPTION 创建视图 view1。
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。
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)