From a0fd227b189e88a06ddf7b86474cfe9dca862c22 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Wed, 20 May 2020 21:03:21 +0800 Subject: [PATCH 1/6] update the doc of view --- views.md | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 126 insertions(+), 1 deletion(-) diff --git a/views.md b/views.md index 6268eb73e0ea..c80a829d4a3b 100644 --- a/views.md +++ b/views.md @@ -12,6 +12,19 @@ TiDB 支持视图,视图是一张虚拟表,该虚拟表的结构由创建视 查询一个视图和查询一张普通表类似。但是 TiDB 在真正执行查询视图时,会将视图展开成创建视图时定义的 `SELECT` 语句,进而执行展开后的查询语句。 +## 查看视图的相关信息 + +通过以下方式,可以查看 view 相关的信息。 + +### `SHOW CREATE TABLE view_name` 或 `SHOW CREATE VIEW view_name` +该语句可以查看 view 对应的创建语句,及创建 view 时对应的 character_set_client 及 collation_connection 系统变量值。 + +### 查询 INFORMATION_SCHEMA.VIEWS 表 +通过该表可以查看 view 的相关元信息,如 `TABLE_CATALOG`, `TABLE_SCHEMA`, `TABLE_NAME`, `VIEW_DEFINITION`, `CHECK_OPTION`, `IS_UPDATABLE`, `DEFINER`, `SECURITY_TYPE`, `CHARACTER_SET_CLIENT`, `COLLATION_CONNECTION` 等。 + +### 查询 HTTP API +通过访问 `http://{TiDBIP}:10080/schema/{db}/{view}`, 可以得到对应 view 的所有元信息。 + ## 样例 以下例子将创建一个视图,并在该视图上进行查询,最后删除该视图。 @@ -87,6 +100,118 @@ select * from v; {{< copyable "sql" >}} +```sql +show create view v; +``` + +``` ++------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ +| View | Create View | character_set_client | collation_connection | ++------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ +| v | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`127.0.0.1` SQL SECURITY DEFINER VIEW `v` (`a`) AS SELECT `s`.`a` FROM `test`.`t` LEFT JOIN `test`.`s` ON `t`.`a`=`s`.`a` | utf8 | utf8_general_ci | ++------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ +1 row in set (0.00 sec) +``` + +{{< copyable "sql" >}} + +```sql +select * from information_schema.views; +``` + +``` ++---------------+--------------+------------+------------------------------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+ +| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION | CHECK_OPTION | IS_UPDATABLE | DEFINER | SECURITY_TYPE | CHARACTER_SET_CLIENT | COLLATION_CONNECTION | ++---------------+--------------+------------+------------------------------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+ +| def | test | v | SELECT `s`.`a` FROM `test`.`t` LEFT JOIN `test`.`s` ON `t`.`a`=`s`.`a` | CASCADED | NO | root@127.0.0.1 | DEFINER | utf8 | utf8_general_ci | ++---------------+--------------+------------+------------------------------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+ +1 row in set (0.00 sec) +``` + +``` +curl http://127.0.0.1:10080/schema/test/v +``` + +``` +{ + "id": 122, + "name": { + "O": "v", + "L": "v" + }, + "charset": "utf8", + "collate": "utf8_general_ci", + "cols": [ + { + "id": 1, + "name": { + "O": "a", + "L": "a" + }, + "offset": 0, + "origin_default": null, + "default": null, + "default_bit": null, + "default_is_expr": false, + "generated_expr_string": "", + "generated_stored": false, + "dependences": null, + "type": { + "Tp": 0, + "Flag": 0, + "Flen": 0, + "Decimal": 0, + "Charset": "", + "Collate": "", + "Elems": null + }, + "state": 5, + "comment": "", + "hidden": false, + "version": 0 + } + ], + "index_info": null, + "fk_info": null, + "state": 5, + "pk_is_handle": false, + "is_common_handle": false, + "comment": "", + "auto_inc_id": 0, + "auto_id_cache": 0, + "auto_rand_id": 0, + "max_col_id": 1, + "max_idx_id": 0, + "update_timestamp": 416801600091455490, + "ShardRowIDBits": 0, + "max_shard_row_id_bits": 0, + "auto_random_bits": 0, + "pre_split_regions": 0, + "partition": null, + "compression": "", + "view": { + "view_algorithm": 0, + "view_definer": { + "Username": "root", + "Hostname": "127.0.0.1", + "CurrentUser": false, + "AuthUsername": "root", + "AuthHostname": "%" + }, + "view_security": 0, + "view_select": "SELECT `s`.`a` FROM `test`.`t` LEFT JOIN `test`.`s` ON `t`.`a`=`s`.`a`", + "view_checkoption": 1, + "view_cols": null + }, + "sequence": null, + "Lock": null, + "version": 3, + "tiflash_replica": null +} +``` + +{{< copyable "sql" >}} + ```sql drop view v; ``` @@ -100,7 +225,7 @@ Query OK, 0 rows affected (0.02 sec) 目前 TiDB 中的视图有以下局限性: - 不支持物化视图。 -- TiDB 中视图为只读视图,不支持对视图进行 `UPDATE`、`INSERT`、`DELETE` 等写入操作。 +- TiDB 中视图为只读视图,不支持对视图进行 `UPDATE`、`INSERT`、`DELETE`、`TRUNCATE` 等写入操作。 - 对已创建的视图仅支持 `DROP` 的 DDL 操作,即 `DROP [VIEW | TABLE]`。 ## 扩展阅读 From a6a9ed708f940a25afafaa5006503da443f435e2 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Wed, 20 May 2020 21:07:49 +0800 Subject: [PATCH 2/6] make lint happy --- views.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/views.md b/views.md index c80a829d4a3b..c7914ab91cce 100644 --- a/views.md +++ b/views.md @@ -17,12 +17,15 @@ TiDB 支持视图,视图是一张虚拟表,该虚拟表的结构由创建视 通过以下方式,可以查看 view 相关的信息。 ### `SHOW CREATE TABLE view_name` 或 `SHOW CREATE VIEW view_name` + 该语句可以查看 view 对应的创建语句,及创建 view 时对应的 character_set_client 及 collation_connection 系统变量值。 ### 查询 INFORMATION_SCHEMA.VIEWS 表 + 通过该表可以查看 view 的相关元信息,如 `TABLE_CATALOG`, `TABLE_SCHEMA`, `TABLE_NAME`, `VIEW_DEFINITION`, `CHECK_OPTION`, `IS_UPDATABLE`, `DEFINER`, `SECURITY_TYPE`, `CHARACTER_SET_CLIENT`, `COLLATION_CONNECTION` 等。 ### 查询 HTTP API + 通过访问 `http://{TiDBIP}:10080/schema/{db}/{view}`, 可以得到对应 view 的所有元信息。 ## 样例 From e7dc70d07ab2ba77f10432a15158e757032b5045 Mon Sep 17 00:00:00 2001 From: xuhuaiyu <391585975@qq.com> Date: Fri, 22 May 2020 17:08:11 +0800 Subject: [PATCH 3/6] address comment --- views.md | 170 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 88 insertions(+), 82 deletions(-) diff --git a/views.md b/views.md index c7914ab91cce..651abadcd061 100644 --- a/views.md +++ b/views.md @@ -18,88 +18,7 @@ TiDB 支持视图,视图是一张虚拟表,该虚拟表的结构由创建视 ### `SHOW CREATE TABLE view_name` 或 `SHOW CREATE VIEW view_name` -该语句可以查看 view 对应的创建语句,及创建 view 时对应的 character_set_client 及 collation_connection 系统变量值。 - -### 查询 INFORMATION_SCHEMA.VIEWS 表 - -通过该表可以查看 view 的相关元信息,如 `TABLE_CATALOG`, `TABLE_SCHEMA`, `TABLE_NAME`, `VIEW_DEFINITION`, `CHECK_OPTION`, `IS_UPDATABLE`, `DEFINER`, `SECURITY_TYPE`, `CHARACTER_SET_CLIENT`, `COLLATION_CONNECTION` 等。 - -### 查询 HTTP API - -通过访问 `http://{TiDBIP}:10080/schema/{db}/{view}`, 可以得到对应 view 的所有元信息。 - -## 样例 - -以下例子将创建一个视图,并在该视图上进行查询,最后删除该视图。 - -{{< copyable "sql" >}} - -```sql -create table t(a int, b int); -``` - -``` -Query OK, 0 rows affected (0.01 sec) -``` - -{{< copyable "sql" >}} - -```sql -insert into t values(1, 1),(2,2),(3,3); -``` - -``` -Query OK, 3 rows affected (0.00 sec) -Records: 3 Duplicates: 0 Warnings: 0 -``` - -{{< copyable "sql" >}} - -```sql -create table s(a int); -``` - -``` -Query OK, 0 rows affected (0.01 sec) -``` - -{{< copyable "sql" >}} - -```sql -insert into s values(2),(3); -``` - -``` -Query OK, 2 rows affected (0.01 sec) -Records: 2 Duplicates: 0 Warnings: 0 -``` - -{{< copyable "sql" >}} - -```sql -create view v as select s.a from t left join s on t.a = s.a; -``` - -``` -Query OK, 0 rows affected (0.01 sec) -``` - -{{< copyable "sql" >}} - -```sql -select * from v; -``` - -``` -+------+ -| a | -+------+ -| NULL | -| 2 | -| 3 | -+------+ -3 rows in set (0.00 sec) -``` +示例: {{< copyable "sql" >}} @@ -107,6 +26,8 @@ select * from v; show create view v; ``` +该语句可以查看 view 对应的创建语句,及创建 view 时对应的 character_set_client 及 collation_connection 系统变量值。 + ``` +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | View | Create View | character_set_client | collation_connection | @@ -116,12 +37,18 @@ show create view v; 1 row in set (0.00 sec) ``` +### 查询 INFORMATION_SCHEMA.VIEWS 表 + +示例: + {{< copyable "sql" >}} ```sql select * from information_schema.views; ``` +通过查询该表可以查看 view 的相关元信息,如 `TABLE_CATALOG`, `TABLE_SCHEMA`, `TABLE_NAME`, `VIEW_DEFINITION`, `CHECK_OPTION`, `IS_UPDATABLE`, `DEFINER`, `SECURITY_TYPE`, `CHARACTER_SET_CLIENT`, `COLLATION_CONNECTION` 等。 + ``` +---------------+--------------+------------+------------------------------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION | CHECK_OPTION | IS_UPDATABLE | DEFINER | SECURITY_TYPE | CHARACTER_SET_CLIENT | COLLATION_CONNECTION | @@ -131,10 +58,16 @@ select * from information_schema.views; 1 row in set (0.00 sec) ``` +### 查询 HTTP API + +示例: + ``` curl http://127.0.0.1:10080/schema/test/v ``` +通过访问 `http://{TiDBIP}:10080/schema/{db}/{view}`, 可以得到对应 view 的所有元信息。 + ``` { "id": 122, @@ -213,6 +146,79 @@ curl http://127.0.0.1:10080/schema/test/v } ``` +## 示例 + +以下例子将创建一个视图,并在该视图上进行查询,最后删除该视图。 + +{{< copyable "sql" >}} + +```sql +create table t(a int, b int); +``` + +``` +Query OK, 0 rows affected (0.01 sec) +``` + +{{< copyable "sql" >}} + +```sql +insert into t values(1, 1),(2,2),(3,3); +``` + +``` +Query OK, 3 rows affected (0.00 sec) +Records: 3 Duplicates: 0 Warnings: 0 +``` + +{{< copyable "sql" >}} + +```sql +create table s(a int); +``` + +``` +Query OK, 0 rows affected (0.01 sec) +``` + +{{< copyable "sql" >}} + +```sql +insert into s values(2),(3); +``` + +``` +Query OK, 2 rows affected (0.01 sec) +Records: 2 Duplicates: 0 Warnings: 0 +``` + +{{< copyable "sql" >}} + +```sql +create view v as select s.a from t left join s on t.a = s.a; +``` + +``` +Query OK, 0 rows affected (0.01 sec) +``` + +{{< copyable "sql" >}} + +```sql +select * from v; +``` + +``` ++------+ +| a | ++------+ +| NULL | +| 2 | +| 3 | ++------+ +3 rows in set (0.00 sec) +``` + {{< copyable "sql" >}} ```sql From 33438c4ff2d38073e5a7d40abf8db4595c7b5229 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Fri, 22 May 2020 17:35:34 +0800 Subject: [PATCH 4/6] refine format --- views.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/views.md b/views.md index 651abadcd061..a63bb795d79c 100644 --- a/views.md +++ b/views.md @@ -18,7 +18,7 @@ TiDB 支持视图,视图是一张虚拟表,该虚拟表的结构由创建视 ### `SHOW CREATE TABLE view_name` 或 `SHOW CREATE VIEW view_name` -示例: +示例: {{< copyable "sql" >}} @@ -26,9 +26,9 @@ TiDB 支持视图,视图是一张虚拟表,该虚拟表的结构由创建视 show create view v; ``` -该语句可以查看 view 对应的创建语句,及创建 view 时对应的 character_set_client 及 collation_connection 系统变量值。 +该语句可以查看 view 对应的创建语句,及创建 view 时对应的 `character_set_client` 及 `collation_connection` 系统变量值。 -``` +```sql +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | View | Create View | character_set_client | collation_connection | +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ @@ -37,7 +37,7 @@ show create view v; 1 row in set (0.00 sec) ``` -### 查询 INFORMATION_SCHEMA.VIEWS 表 +### 查询 `INFORMATION_SCHEMA.VIEWS` 表 示例: @@ -47,9 +47,9 @@ show create view v; select * from information_schema.views; ``` -通过查询该表可以查看 view 的相关元信息,如 `TABLE_CATALOG`, `TABLE_SCHEMA`, `TABLE_NAME`, `VIEW_DEFINITION`, `CHECK_OPTION`, `IS_UPDATABLE`, `DEFINER`, `SECURITY_TYPE`, `CHARACTER_SET_CLIENT`, `COLLATION_CONNECTION` 等。 +通过查询该表可以查看 view 的相关元信息,如 `TABLE_CATALOG`、`TABLE_SCHEMA`、`TABLE_NAME`、`VIEW_DEFINITION`、`CHECK_OPTION`、`IS_UPDATABLE`、`DEFINER`、`SECURITY_TYPE`、`CHARACTER_SET_CLIENT`、`COLLATION_CONNECTION` 等。 -``` +```sql +---------------+--------------+------------+------------------------------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION | CHECK_OPTION | IS_UPDATABLE | DEFINER | SECURITY_TYPE | CHARACTER_SET_CLIENT | COLLATION_CONNECTION | +---------------+--------------+------------+------------------------------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+ @@ -62,11 +62,13 @@ select * from information_schema.views; 示例: +{{< copyable "" >}} + ``` curl http://127.0.0.1:10080/schema/test/v ``` -通过访问 `http://{TiDBIP}:10080/schema/{db}/{view}`, 可以得到对应 view 的所有元信息。 +通过访问 `http://{TiDBIP}:10080/schema/{db}/{view}` 可以得到对应 view 的所有元信息。 ``` { From 86ecc5d38a7258592d5ebc79e5718ac1dece0d2b Mon Sep 17 00:00:00 2001 From: Feng Liyuan Date: Mon, 25 May 2020 19:44:41 +0800 Subject: [PATCH 5/6] Update views.md Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> --- views.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views.md b/views.md index a63bb795d79c..1391b87c122f 100644 --- a/views.md +++ b/views.md @@ -16,7 +16,7 @@ TiDB 支持视图,视图是一张虚拟表,该虚拟表的结构由创建视 通过以下方式,可以查看 view 相关的信息。 -### `SHOW CREATE TABLE view_name` 或 `SHOW CREATE VIEW view_name` +### 使用 `SHOW CREATE TABLE view_name` 或 `SHOW CREATE VIEW view_name` 语句 示例: From 8ba2f1df8263dd66e741f5ffefbeb7668db9695e Mon Sep 17 00:00:00 2001 From: Feng Liyuan Date: Mon, 25 May 2020 19:44:51 +0800 Subject: [PATCH 6/6] Update views.md Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> --- views.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views.md b/views.md index 1391b87c122f..aaa411e832f2 100644 --- a/views.md +++ b/views.md @@ -26,7 +26,7 @@ TiDB 支持视图,视图是一张虚拟表,该虚拟表的结构由创建视 show create view v; ``` -该语句可以查看 view 对应的创建语句,及创建 view 时对应的 `character_set_client` 及 `collation_connection` 系统变量值。 +使用该语句可以查看 view 对应的创建语句,及创建 view 时对应的 `character_set_client` 及 `collation_connection` 系统变量值。 ```sql +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+