PingKai Logo下载

CREATE VIEW

CREATE VIEW 语句将一个 SELECT 语句保存为一个可查询的对象,类似于一个表。TiDB 中的视图是非物化的。这意味着在查询视图时,TiDB 会在内部重写查询,将视图定义与 SQL 查询合并。

概要

CreateViewStmt
CREATE OrReplace ViewAlgorithm ViewDefiner ViewSQLSecurity VIEW ViewName ViewFieldList AS CreateViewSelectOpt ViewCheckOption
OrReplace
OR REPLACE
ViewAlgorithm
ALGORITHM = UNDEFINED MERGE TEMPTABLE
ViewDefiner
DEFINER = Username
ViewSQLSecurity
SQL SECURITY DEFINER INVOKER
ViewName
TableName
ViewFieldList
( Identifier , )
ViewCheckOption
WITH CASCADED LOCAL CHECK OPTION

示例

mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, c1 INT NOT NULL);
Query OK, 0 rows affected (0.11 sec)

mysql> INSERT INTO t1 (c1) VALUES (1),(2),(3),(4),(5);
Query OK, 5 rows affected (0.03 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> CREATE VIEW v1 AS SELECT * FROM t1 WHERE c1 > 2;
Query OK, 0 rows affected (0.11 sec)

mysql> SELECT * FROM t1;
+----+----+
| id | c1 |
+----+----+
|  1 |  1 |
|  2 |  2 |
|  3 |  3 |
|  4 |  4 |
|  5 |  5 |
+----+----+
5 rows in set (0.00 sec)

mysql> SELECT * FROM v1;
+----+----+
| id | c1 |
+----+----+
|  3 |  3 |
|  4 |  4 |
|  5 |  5 |
+----+----+
3 rows in set (0.00 sec)

mysql> INSERT INTO t1 (c1) VALUES (6);
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM v1;
+----+----+
| id | c1 |
+----+----+
|  3 |  3 |
|  4 |  4 |
|  5 |  5 |
|  6 |  6 |
+----+----+
4 rows in set (0.00 sec)

mysql> INSERT INTO v1 (c1) VALUES (7);
ERROR 1105 (HY000): insert into view v1 is not supported now.

MySQL 兼容性

  • 目前,TiDB 中的任何视图都不能进行插入或更新(即不支持 INSERT VIEW 和 UPDATE VIEW)。WITH CHECK OPTION 仅在语法上兼容,但不生效。
  • 目前,TiDB 中的视图不支持 ALTER VIEW,但可以使用 CREATE OR REPLACE 代替。
  • 目前,ALGORITHM 字段在 TiDB 中仅在语法上兼容,但不生效。TiDB 目前只支持 MERGE 算法。

相关链接