📣

TiDB Cloud Serverless 现已更名为
Starter
!此页面由 AI 自动翻译,英文原文请见
此处。

CREATE VIEW

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

概要

CreateViewStmt
CREATEOrReplaceViewAlgorithmViewDefinerViewSQLSecurityVIEWViewNameViewFieldListASCreateViewSelectOptViewCheckOption
OrReplace
ORREPLACE
ViewAlgorithm
ALGORITHM=UNDEFINEDMERGETEMPTABLE
ViewDefiner
DEFINER=Username
ViewSQLSecurity
SQLSECURITYDEFINERINVOKER
ViewName
TableName
ViewFieldList
(Identifier,)
ViewCheckOption
WITHCASCADEDLOCALCHECKOPTION

示例

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 VIEWUPDATE VIEW)。WITH CHECK OPTION 仅在语法上兼容,但不生效。
  • 目前,TiDB 中的视图不支持 ALTER VIEW,但可以使用 CREATE OR REPLACE 代替。
  • 目前,ALGORITHM 字段在 TiDB 中仅在语法上兼容,但不生效。TiDB 目前只支持 MERGE 算法。

相关链接

文档内容是否有帮助?