diff --git a/TOC.md b/TOC.md index af72aad56d4b..8e25528624e9 100644 --- a/TOC.md +++ b/TOC.md @@ -122,10 +122,78 @@ - [其它函数](dev/reference/sql/functions-and-operators/miscellaneous-functions.md) - [精度数学](dev/reference/sql/functions-and-operators/precision-math.md) + SQL 语句 - - [数据定义语句 (DDL)](dev/reference/sql/statements/ddl.md) - - [数据操作语句 (DML)](dev/reference/sql/statements/dml.md) - - [Prepared SQL 语句语法](dev/reference/sql/statements/prepare.md) - - [实用工具语句](dev/reference/sql/statements/util.md) + - [`ADD COLUMN`](dev/reference/sql/statements/add-column.md) + - [`ADD INDEX`](dev/reference/sql/statements/add-index.md) + - [`ADMIN`](dev/reference/sql/statements/admin.md) + - [`ALTER TABLE`](dev/reference/sql/statements/alter-table.md) + - [`ALTER USER`](dev/reference/sql/statements/alter-user.md) + - [`ANALYZE TABLE`](dev/reference/sql/statements/analyze-table.md) + - [`BEGIN`](dev/reference/sql/statements/begin.md) + - [`COMMIT`](dev/reference/sql/statements/commit.md) + - [`CREATE DATABASE`](dev/reference/sql/statements/create-database.md) + - [`CREATE INDEX`](dev/reference/sql/statements/create-index.md) + - [`CREATE TABLE LIKE`](dev/reference/sql/statements/create-table-like.md) + - [`CREATE TABLE`](dev/reference/sql/statements/create-table.md) + - [`CREATE USER`](dev/reference/sql/statements/create-user.md) + - [`CREATE VIEW`](dev/reference/sql/statements/create-view.md) + - [`DEALLOCATE`](dev/reference/sql/statements/deallocate.md) + - [`DELETE`](dev/reference/sql/statements/delete.md) + - [`DESC`](dev/reference/sql/statements/desc.md) + - [`DESCRIBE`](dev/reference/sql/statements/describe.md) + - [`DO`](dev/reference/sql/statements/do.md) + - [`DROP COLUMN`](dev/reference/sql/statements/drop-column.md) + - [`DROP DATABASE`](dev/reference/sql/statements/drop-database.md) + - [`DROP INDEX`](dev/reference/sql/statements/drop-index.md) + - [`DROP TABLE`](dev/reference/sql/statements/drop-table.md) + - [`DROP USER`](dev/reference/sql/statements/drop-user.md) + - [`DROP VIEW`](dev/reference/sql/statements/drop-view.md) + - [`EXECUTE`](dev/reference/sql/statements/execute.md) + - [`EXPLAIN ANALYZE`](dev/reference/sql/statements/explain-analyze.md) + - [`EXPLAIN`](dev/reference/sql/statements/explain.md) + - [`FLUSH PRIVILEGES`](dev/reference/sql/statements/flush-privileges.md) + - [`FLUSH STATUS`](dev/reference/sql/statements/flush-status.md) + - [`FLUSH TABLES`](dev/reference/sql/statements/flush-tables.md) + - [`GRANT `](dev/reference/sql/statements/grant-privileges.md) + - [`INSERT`](dev/reference/sql/statements/insert.md) + - [`KILL [TIDB]`](dev/reference/sql/statements/kill.md) + - [`LOAD DATA`](dev/reference/sql/statements/load-data.md) + - [`MODIFY COLUMN`](dev/reference/sql/statements/modify-column.md) + - [`PREPARE`](dev/reference/sql/statements/prepare.md) + - [`RENAME INDEX`](dev/reference/sql/statements/rename-index.md) + - [`RENAME TABLE`](dev/reference/sql/statements/rename-table.md) + - [`REPLACE`](dev/reference/sql/statements/replace.md) + - [`REVOKE `](dev/reference/sql/statements/revoke-privileges.md) + - [`ROLLBACK`](dev/reference/sql/statements/rollback.md) + - [`SELECT`](dev/reference/sql/statements/select.md) + - [`SET [NAMES|CHARACTER SET]`](dev/reference/sql/statements/set-names.md) + - [`SET PASSWORD`](dev/reference/sql/statements/set-password.md) + - [`SET TRANSACTION`](dev/reference/sql/statements/set-transaction.md) + - [`SET [GLOBAL|SESSION] `](dev/reference/sql/statements/set-variable.md) + - [`SHOW CHARACTER SET`](dev/reference/sql/statements/show-character-set.md) + - [`SHOW COLLATION`](dev/reference/sql/statements/show-collation.md) + - [`SHOW [FULL] COLUMNS FROM`](dev/reference/sql/statements/show-columns-from.md) + - [`SHOW CREATE TABLE`](dev/reference/sql/statements/show-create-table.md) + - [`SHOW CREATE USER`](dev/reference/sql/statements/show-create-user.md) + - [`SHOW DATABASES`](dev/reference/sql/statements/show-databases.md) + - [`SHOW ENGINES`](dev/reference/sql/statements/show-engines.md) + - [`SHOW ERRORS`](dev/reference/sql/statements/show-errors.md) + - [`SHOW [FULL] FIELDS FROM`](dev/reference/sql/statements/show-fields-from.md) + - [`SHOW GRANTS`](dev/reference/sql/statements/show-grants.md) + - [`SHOW INDEXES [FROM|IN]`](dev/reference/sql/statements/show-indexes.md) + - [`SHOW INDEX [FROM|IN]`](dev/reference/sql/statements/show-index.md) + - [`SHOW KEYS [FROM|IN]`](dev/reference/sql/statements/show-keys.md) + - [`SHOW PRIVILEGES`](dev/reference/sql/statements/show-privileges.md) + - [`SHOW [FULL] PROCESSSLIST`](dev/reference/sql/statements/show-processlist.md) + - [`SHOW SCHEMAS`](dev/reference/sql/statements/show-schemas.md) + - [`SHOW [FULL] TABLES`](dev/reference/sql/statements/show-tables.md) + - [`SHOW TABLE STATUS`](dev/reference/sql/statements/show-table-status.md) + - [`SHOW [GLOBAL|SESSION] VARIABLES`](dev/reference/sql/statements/show-variables.md) + - [`SHOW WARNINGS`](dev/reference/sql/statements/show-warnings.md) + - [`START TRANSACTION`](dev/reference/sql/statements/start-transaction.md) + - [`TRACE`](dev/reference/sql/statements/trace.md) + - [`TRUNCATE`](dev/reference/sql/statements/truncate.md) + - [`UPDATE`](dev/reference/sql/statements/update.md) + - [`USE`](dev/reference/sql/statements/use.md) - [约束](dev/reference/sql/constraints.md) - [生成列](dev/reference/sql/generated-columns.md) - [字符集](dev/reference/sql/character-set.md) diff --git a/dev/reference/sql/statements/add-column.md b/dev/reference/sql/statements/add-column.md new file mode 100644 index 000000000000..0725e69cb0d9 --- /dev/null +++ b/dev/reference/sql/statements/add-column.md @@ -0,0 +1,82 @@ +--- +title: ADD COLUMN +summary: TiDB 数据库中 ADD COLUMN 的使用概况。 +category: reference +--- + +# ADD COLUMN + +`ALTER TABLE.. ADD COLUMN` 语句用于在已有表中添加列。在 TiDB 中,`ADD COLUMN` 为在线操作,不会阻塞表中的数据读写。 + +## 语法图 + +**AlterTableStmt:** + +![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) + +**AlterTableSpec:** + +![AlterTableSpec](/media/sqlgram/AlterTableSpec.png) + +**ColumnKeywordOpt:** + +![ColumnKeywordOpt](/media/sqlgram/ColumnKeywordOpt.png) + +**ColumnDef:** + +![ColumnDef](/media/sqlgram/ColumnDef.png) + +**ColumnPosition:** + +![ColumnPosition](/media/sqlgram/ColumnPosition.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY auto_increment); +Query OK, 0 rows affected (0.11 sec) + +mysql> INSERT INTO t1 VALUES (NULL); +Query OK, 1 row affected (0.02 sec) + +mysql> SELECT * FROM t1; ++----+ +| id | ++----+ +| 1 | ++----+ +1 row in set (0.00 sec) + +mysql> ALTER TABLE t1 ADD COLUMN c1 INT NOT NULL; +Query OK, 0 rows affected (0.28 sec) + +mysql> SELECT * FROM t1; ++----+----+ +| id | c1 | ++----+----+ +| 1 | 0 | ++----+----+ +1 row in set (0.00 sec) + +mysql> ALTER TABLE t1 ADD c2 INT NOT NULL AFTER c1; +Query OK, 0 rows affected (0.28 sec) + +mysql> SELECT * FROM t1; ++----+----+----+ +| id | c1 | c2 | ++----+----+----+ +| 1 | 0 | 0 | ++----+----+----+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +* 不支持同时添加多列。 +* 不支持将新添加的列设为 `PRIMARY KEY`。 +* 不支持将新添加的列设为 `AUTO_INCREMENT`。 + +## 另请参阅 + +* [ADD INDEX](/dev/reference/sql/statements/add-index.md) +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) diff --git a/dev/reference/sql/statements/add-index.md b/dev/reference/sql/statements/add-index.md new file mode 100644 index 000000000000..a3ba0aa25c41 --- /dev/null +++ b/dev/reference/sql/statements/add-index.md @@ -0,0 +1,80 @@ +--- +title: ADD INDEX +summary: TiDB 数据库中 ADD INDEX 的使用概况。 +category: reference +--- + +# ADD INDEX + +`ALTER TABLE.. ADD INDEX` 语句用于在已有表中添加一个索引。在 TiDB 中,`ADD INDEX` 为在线操作,不会阻塞表中的数据读写。 + +## 语法图 + +**AlterTableStmt:** + +![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) + +**AlterTableSpec:** + +![AlterTableSpec](/media/sqlgram/AlterTableSpec.png) + +**ColumnKeywordOpt:** + +![ColumnKeywordOpt](/media/sqlgram/ColumnKeywordOpt.png) + +**ColumnDef:** + +![ColumnDef](/media/sqlgram/ColumnDef.png) + +**ColumnPosition:** + +![ColumnPosition](/media/sqlgram/ColumnPosition.png) + +## 示例 + +```sql +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> EXPLAIN SELECT * FROM t1 WHERE c1 = 3; ++---------------------+----------+------+-------------------------------------------------------------+ +| id | count | task | operator info | ++---------------------+----------+------+-------------------------------------------------------------+ +| TableReader_7 | 10.00 | root | data:Selection_6 | +| └─Selection_6 | 10.00 | cop | eq(test.t1.c1, 3) | +| └─TableScan_5 | 10000.00 | cop | table:t1, range:[-inf,+inf], keep order:false, stats:pseudo | ++---------------------+----------+------+-------------------------------------------------------------+ +3 rows in set (0.00 sec) + +mysql> ALTER TABLE t1 ADD INDEX (c1); +Query OK, 0 rows affected (0.30 sec) + +mysql> EXPLAIN SELECT * FROM t1 WHERE c1 = 3; ++-------------------+-------+------+-----------------------------------------------------------------+ +| id | count | task | operator info | ++-------------------+-------+------+-----------------------------------------------------------------+ +| IndexReader_6 | 10.00 | root | index:IndexScan_5 | +| └─IndexScan_5 | 10.00 | cop | table:t1, index:c1, range:[3,3], keep order:false, stats:pseudo | ++-------------------+-------+------+-----------------------------------------------------------------+ +2 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +* 不支持 `FULLTEXT`,`HASH` 和 `SPATIAL` 索引。 +* 不支持降序索引(类似于 MySQL 5.7)。 +* 目前尚不支持同时添加多个索引。 +* 无法向表中添加 `PRIMARY KEY`。 + +## 另请参阅 + +* [CREATE INDEX](/dev/reference/sql/statements/create-index.md) +* [DROP INDEX](/dev/reference/sql/statements/drop-index.md) +* [RENAME INDEX](/dev/reference/sql/statements/rename-index.md) +* [ADD COLUMN](/dev/reference/sql/statements/add-column.md) +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [EXPLAIN](/dev/reference/sql/statements/explain.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/admin.md b/dev/reference/sql/statements/admin.md deleted file mode 100644 index 111917862f38..000000000000 --- a/dev/reference/sql/statements/admin.md +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: 数据库管理语句 -category: reference -aliases: ['/docs-cn/sql/admin/'] ---- - -# 数据库管理语句 - -TiDB 可以通过一些语句对数据库进行管理,包括设置权限、修改系统变量、查询数据库状态。 - -## 权限管理 - -参考[权限管理文档](/dev/reference/security/privilege-system.md)。 - -## `SET` 语句 - -`SET` 语句有多种作用和形式: - -### 设置变量值 - -```sql -SET variable_assignment [, variable_assignment] ... - -variable_assignment: - user_var_name = expr - | param_name = expr - | local_var_name = expr - | [GLOBAL | SESSION] - system_var_name = expr - | [@@global. | @@session. | @@] - system_var_name = expr -``` - -这种语法可以设置 TiDB 的变量值,包括系统变量以及用户定义变量。对于用户自定义变量,都是会话范围的变量;对于系统变量,通过 `@@global.` 或者是 `GLOBAL` 设置的变量为全局范围变量,否则为会话范围变量,具体参考[系统变量](../sql/variable.md)一章。 - -### `SET CHARACTER` 语句和 `SET NAMES` - -```sql -SET {CHARACTER SET | CHARSET} - {'charset_name' | DEFAULT} - -SET NAMES {'charset_name' - [COLLATE 'collation_name'] | DEFAULT} -``` - -这个语句设置这三个会话范围的系统变量:`character_set_client`,`character_set_results`,`character_set_connection` 设置为给定的字符集。目前 `character_set_connection` 变量的值和 MySQL 有所区别,MySQL 将其设置为 `character_set_database` 的值。 - -### 设置密码 - -```sql -SET PASSWORD [FOR user] = password_option - -password_option: { - 'auth_string' - | PASSWORD('auth_string') -} -``` - -设置用户密码,具体信息参考[权限管理](../sql/privilege.md)。 - -### 设置隔离级别 - -```sql -SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; -``` - -设置事务隔离级别,具体信息参考[事务语句](../sql/transaction.md#事务隔离级别)。 - -## `SHOW` 语句 - -TiDB 支持部分 `SHOW` 语句,用于查看 Database/Table/Column 信息,或者是数据库内部的状态。已经支持的语句: - -```sql -# 已支持,且和 MySQL 行为一致 -SHOW CHARACTER SET [like_or_where] -SHOW COLLATION [like_or_where] -SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where] -SHOW CREATE {DATABASE|SCHEMA} db_name -SHOW CREATE TABLE tbl_name -SHOW DATABASES [like_or_where] -SHOW GRANTS FOR user -SHOW INDEX FROM tbl_name [FROM db_name] -SHOW PRIVILEGES -SHOW [FULL] PROCESSLIST -SHOW [GLOBAL | SESSION] STATUS [like_or_where] -SHOW TABLE STATUS [FROM db_name] [like_or_where] -SHOW [FULL] TABLES [FROM db_name] [like_or_where] -SHOW [GLOBAL | SESSION] VARIABLES [like_or_where] -SHOW WARNINGS - -# 已支持,但是返回空结果,目的是提升兼容性 -SHOW ENGINE engine_name {STATUS | MUTEX} -SHOW [STORAGE] ENGINES -SHOW PLUGINS -SHOW PROCEDURE STATUS [like_or_where] -SHOW TRIGGERS [FROM db_name] [like_or_where] -SHOW EVENTS -SHOW FUNCTION STATUS [like_or_where] -SHOW MASTER STATUS - -# TiDB 特有语句,用于查看统计信息 -SHOW STATS_META [like_or_where] -SHOW STATS_HISTOGRAMS [like_or_where] -SHOW STATS_BUCKETS [like_or_where] - -like_or_where: - LIKE 'pattern' - | WHERE expr -``` - -说明: - -* 通过 `SHOW` 语句展示统计信息请参考[统计信息说明](/dev/reference/performance/statistics.md#统计信息的查看)。 -* 关于 `SHOW` 语句更多信息请参考 [MySQL 文档](https://dev.mysql.com/doc/refman/5.7/en/show.html) - -在 TiDB 中,`SHOW MASTER STATUS` 语句返回的 `UniqueID` 实际上是从 `PD` 获取的当前 `TSO` 时间,这个时间在做 binlog 增量同步过程中需要使用。 - -```sql -mysql> show master status; -+-------------|--------------------|--------------|------------------|-------------------+ -| File | UniqueID | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | -+-------------|--------------------|--------------|------------------|-------------------+ -| tidb-binlog | 403756327834484736 | | | | -+-------------|--------------------|--------------|------------------|-------------------+ -1 row in set (0.00 sec) -``` - -## `ADMIN` 语句 - -该语句是 TiDB 扩展语法,用于查看 TiDB 自身的状态,及对 TiDB 中的表数据进行校验。 - -```sql -ADMIN SHOW DDL -ADMIN SHOW DDL JOBS -ADMIN SHOW DDL JOB QUERIES job_id [, job_id] ... -ADMIN CANCEL DDL JOBS job_id [, job_id] ... -ADMIN CHECK TABLE tbl_name [, tbl_name] ... -``` - -* `ADMIN SHOW DDL` - - 用于查看当前正在执行的 DDL 作业。 - -* `ADMIN SHOW DDL JOBS` - - 用于查看当前 DDL 作业队列中的所有结果(包括正在运行以及等待运行的任务)以及已执行完成的 DDL 作业队列中的最近十条结果。 - - ```sql - mysql> admin show ddl jobs; - +--------+---------+------------+---------------+----------------------+-----------+----------+-----------+-----------------------------------+---------------+ - | JOB_ID | DB_NAME | TABLE_NAME | JOB_TYPE | SCHEMA_STATE | SCHEMA_ID | TABLE_ID | ROW_COUNT | START_TIME | STATE | - +--------+---------+------------+---------------+----------------------+-----------+----------+-----------+-----------------------------------+---------------+ - | 45 | test | t1 | add index | write reorganization | 32 | 37 | 0 | 2019-01-10 12:38:36.501 +0800 CST | running | - | 44 | test | t1 | add index | none | 32 | 37 | 0 | 2019-01-10 12:36:55.18 +0800 CST | rollback done | - | 43 | test | t1 | add index | public | 32 | 37 | 6 | 2019-01-10 12:35:13.66 +0800 CST | synced | - | 42 | test | t1 | drop index | none | 32 | 37 | 0 | 2019-01-10 12:34:35.204 +0800 CST | synced | - | 41 | test | t1 | add index | public | 32 | 37 | 0 | 2019-01-10 12:33:22.62 +0800 CST | synced | - | 40 | test | t1 | drop column | none | 32 | 37 | 0 | 2019-01-10 12:33:08.212 +0800 CST | synced | - | 39 | test | t1 | add column | public | 32 | 37 | 0 | 2019-01-10 12:32:55.42 +0800 CST | synced | - | 38 | test | t1 | create table | public | 32 | 37 | 0 | 2019-01-10 12:32:41.956 +0800 CST | synced | - | 36 | test | | drop table | none | 32 | 34 | 0 | 2019-01-10 11:29:59.982 +0800 CST | synced | - | 35 | test | | create table | public | 32 | 34 | 0 | 2019-01-10 11:29:40.741 +0800 CST | synced | - | 33 | test | | create schema | public | 32 | 0 | 0 | 2019-01-10 11:29:22.813 +0800 CST | synced | - +--------+---------+------------+---------------+----------------------+-----------+----------+-----------+-----------------------------------+---------------+ - ``` - - * `JOB_ID`:每个 DDL 操作对应一个DDL job,`JOB_ID` 全局唯一。 - * `DB_NAME`:DDL 操作的 database name。 - * `TABLE_NAME`:DDL 操作的 table name。 - * `JOB_TYPE`:DDL 操作的类型。 - * `SCHEMA_STATE`:当前 schema 的状态,如果是 `add index`,就是 index 的状态,如果是 `add column`,就是 column 的状态,如果是 `create table`,就是 table 的状态。常见的状态有以下几种: - * `none`:表示不存在。一般 drop 操作或者 create 操作失败回滚后,会是 `none` 状态。 - * `delete only`,`write only`,`delete reorganization`,`write reorganization`:这四个状态是中间状态,在[Online, Asynchronous Schema Change in F1](http://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/41376.pdf) 论文中有详细说明,在此不详细描述。一般操作中看不到这几种状态,因为中间状态转换很快,只有 `add index` 操作时能看到处于 `write reorganization` 状态,表示正在填充索引数据。 - * `public`:表示存在且可用。一般 `create table`,`add index/column` 等操作完成后,会是 `public` 状态,表示新建的 table/column/index 可以正常读写了。 - * `SCHEMA_ID`:当前 DDL 操作的 database ID。 - * `TABLE_ID`:当前 DDL 操作的 table ID。 - * `ROW_COUNT`:表示在 `add index` 时,当前已经添加完成的数据行数。 - * `START_TIME`:DDL 操作的开始时间。 - * `STATE`:DDL 操作的状态: - * `none`:表示已经放入 DDL 作业队列中,但还没开始执行,还在排队等待前面的 DDL 作业完成。另一种原因可能是 drop 操作后,会变成 none 状态,但是很快会更新成 synced 状态,表示所有 TiDB 都同步到该状态了。 - * `running`:表示正在执行。 - * `synced`:表示已经执行成功,且所有 TiDB 都已经同步该状态了。 - * `rollback done`:表示执行失败,回滚完成。 - * `rollingback`:表示执行失败,还在回滚过程中。 - * `cancelling`:表示正在取消过程中。这个状态只有在用 `ADMIN CANCEL DDL JOBS` 语法取消 DDL 作业后,才会出现。 - -* `ADMIN SHOW DDL JOB QUERIES job_id [, job_id] ...` - - 用于显示 `job_id` 对应的 DDL 任务的原始 SQL 语句。这个 `job_id` 只会搜索正在执行中的任务以及 DDL 历史作业队伍中最近的十条。 - -* `ADMIN CANCEL DDL JOBS job_id [, job_id] ...` - - 用于取消正在执行的 DDL 作业,其返回值为对应的作业取消是否成功,如果失败会显示失败的具体原因。这个操作可以同时取消多个 DDL 作业,其中 DDL 作业 ID 可以通过 `ADMIN SHOW DDL JOBS` 语句来获取。其中如果希望取消的作业已经完成,则取消操作将会失败。 - -* `ADMIN CHECK TABLE tbl_name [, tbl_name] ...` - - 用于对给定表中的所有数据和对应索引进行一致性校验,若通过校验,则返回空的查询结果;否则返回 `data isn't equal` 错误。 diff --git a/dev/reference/sql/statements/alter-table.md b/dev/reference/sql/statements/alter-table.md new file mode 100644 index 000000000000..7f193d806d12 --- /dev/null +++ b/dev/reference/sql/statements/alter-table.md @@ -0,0 +1,76 @@ +--- +title: ALTER TABLE +summary: TiDB 数据库中 ALTER TABLE 的使用概况。 +category: reference +--- + +# ALTER TABLE + +`ALTER TABLE` 语句用于对已有表进行修改,以符合新表结构。`ALTER TABLE` 语句可用于: + +* [`ADD`](/dev/reference/sql/statements/add-index.md),[`DROP`](/dev/reference/sql/statements/drop-index.md),或 [`RENAME`](/dev/reference/sql/statements/rename-index.md) 索引 +* [`ADD`](/dev/reference/sql/statements/add-column.md),[`DROP`](/dev/reference/sql/statements/drop-column.md),[`MODIFY`](/dev/reference/sql/statements/modify-column.md) 或 [`CHANGE`](/dev/reference/sql/statements/change-column.md) 列 + +## 语法图 + +**AlterTableStmt:** + +![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +**AlterTableSpec:** + +![AlterTableSpec](/media/sqlgram/AlterTableSpec.png) + +## 示例 + +```sql +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> EXPLAIN SELECT * FROM t1 WHERE c1 = 3; ++---------------------+----------+------+-------------------------------------------------------------+ +| id | count | task | operator info | ++---------------------+----------+------+-------------------------------------------------------------+ +| TableReader_7 | 10.00 | root | data:Selection_6 | +| └─Selection_6 | 10.00 | cop | eq(test.t1.c1, 3) | +| └─TableScan_5 | 10000.00 | cop | table:t1, range:[-inf,+inf], keep order:false, stats:pseudo | ++---------------------+----------+------+-------------------------------------------------------------+ +3 rows in set (0.00 sec) + +mysql> ALTER TABLE t1 ADD INDEX (c1); +Query OK, 0 rows affected (0.30 sec) + +mysql> EXPLAIN SELECT * FROM t1 WHERE c1 = 3; ++-------------------+-------+------+-----------------------------------------------------------------+ +| id | count | task | operator info | ++-------------------+-------+------+-----------------------------------------------------------------+ +| IndexReader_6 | 10.00 | root | index:IndexScan_5 | +| └─IndexScan_5 | 10.00 | cop | table:t1, index:c1, range:[3,3], keep order:false, stats:pseudo | ++-------------------+-------+------+-----------------------------------------------------------------+ +2 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +* 支持除空间类型外的所有数据类型。 +* 不支持 `FULLTEXT`,`HASH` 和 `SPATIAL` 索引。 + +## 另请参阅 + +* [ADD COLUMN](/dev/reference/sql/statements/add-column.md) +* [DROP COLUMN](/dev/reference/sql/statements/drop-column.md) +* [RENAME COLUMN](/dev/reference/sql/statements/rename-column.md) +* [ADD INDEX](/dev/reference/sql/statements/add-index.md) +* [DROP INDEX](/dev/reference/sql/statements/drop-index.md) +* [RENAME INDEX](/dev/reference/sql/statements/rename-index.md) +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [DROP TABLE](/dev/reference/sql/statements/drop-table.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/alter-user.md b/dev/reference/sql/statements/alter-user.md new file mode 100644 index 000000000000..58eead86123b --- /dev/null +++ b/dev/reference/sql/statements/alter-user.md @@ -0,0 +1,60 @@ +--- +title: ALTER USER +summary: TiDB 数据库中 ALTER USER 的使用概况。 +category: reference +--- + +# ALTER USER + +`ALTER USER` 语句用于更改 TiDB 权限系统内的已有用户。和 MySQL 一样,在 TiDB 权限系统中,用户是用户名和用户名所连接主机的组合。因此,可创建一个用户 `'newuser2'@'192.168.1.1'`,使其只能通过 IP 地址 `192.168.1.1` 进行连接。相同的用户名从不同主机登录时可能会拥有不同的权限。 + +## 语法图 + +**AlterUserStmt:** + +![AlterUserStmt](/media/sqlgram/AlterUserStmt.png) + +**UserSpecList:** + +![UserSpecList](/media/sqlgram/UserSpecList.png) + +**UserSpec:** + +![UserSpec](/media/sqlgram/UserSpec.png) + +## 示例 + +```sql +mysql> CREATE USER 'newuser' IDENTIFIED BY 'newuserpassword'; +Query OK, 1 row affected (0.01 sec) + +mysql> SHOW CREATE USER 'newuser'; ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER for newuser@% | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER 'newuser'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*5806E04BBEE79E1899964C6A04D68BCA69B1A879' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> ALTER USER 'newuser' IDENTIFIED BY 'newnewpassword'; +Query OK, 0 rows affected (0.02 sec) + +mysql> SHOW CREATE USER 'newuser'; ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER for newuser@% | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER 'newuser'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*FB8A1EA1353E8775CA836233E367FBDFCB37BE73' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +* 在 MySQL 中,`ALTER` 语句用于更改属性,例如使密码失效。但 TiDB 尚不支持此功能。 + +## 另请参阅 + +* [Security Compatibility with MySQL](/dev/reference/security/compatibility.md) +* [CREATE USER](/dev/reference/sql/statements/create-user.md) +* [DROP USER](/dev/reference/sql/statements/drop-user.md) +* [SHOW CREATE USER](/dev/reference/sql/statements/show-create-user.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/analyze-table.md b/dev/reference/sql/statements/analyze-table.md new file mode 100644 index 000000000000..236b1247e82f --- /dev/null +++ b/dev/reference/sql/statements/analyze-table.md @@ -0,0 +1,69 @@ +--- +title: ANALYZE TABLE +summary: TiDB 数据库中 ANALYZE TABLE 的使用概况。 +category: reference +--- + +# ANALYZE TABLE + +`ANALYZE TABLE` 语句用于更新 TiDB 在表和索引上留下的统计信息。执行大批量更新或导入记录后,或查询执行计划不是最佳时,建议运行 `ANALYZE TABLE`。 + +当 TiDB 逐渐发现这些统计数据与预估不一致时,也会自动更新其统计数据。 + +## 语法图 + +**AnalyzeTableStmt:** + +![AnalyzeTableStmt](/media/sqlgram/AnalyzeTableStmt.png) + +**TableNameList:** + +![TableNameList](/media/sqlgram/TableNameList.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +## 示例 + +```sql +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> ALTER TABLE t1 ADD INDEX (c1); +Query OK, 0 rows affected (0.30 sec) + +mysql> EXPLAIN SELECT * FROM t1 WHERE c1 = 3; ++-------------------+-------+------+-----------------------------------------------------------------+ +| id | count | task | operator info | ++-------------------+-------+------+-----------------------------------------------------------------+ +| IndexReader_6 | 10.00 | root | index:IndexScan_5 | +| └─IndexScan_5 | 10.00 | cop | table:t1, index:c1, range:[3,3], keep order:false, stats:pseudo | ++-------------------+-------+------+-----------------------------------------------------------------+ +2 rows in set (0.00 sec) + +mysql> analyze table t1; +Query OK, 0 rows affected (0.13 sec) + +mysql> EXPLAIN SELECT * FROM t1 WHERE c1 = 3; ++-------------------+-------+------+---------------------------------------------------+ +| id | count | task | operator info | ++-------------------+-------+------+---------------------------------------------------+ +| IndexReader_6 | 1.00 | root | index:IndexScan_5 | +| └─IndexScan_5 | 1.00 | cop | table:t1, index:c1, range:[3,3], keep order:false | ++-------------------+-------+------+---------------------------------------------------+ +2 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`ANALYZE TABLE` 在语法上与 MySQL 类似。但 `ANALYZE TABLE` 在 TiDB 上执行所需时间可能长得多,因为它的内部运行方式不同。 + +## 另请参阅 + +* [EXPLAIN](/dev/reference/sql/statements/explain.md) +* [EXPLAIN ANALYZE](/dev/reference/sql/statements/explain-analyze.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/begin.md b/dev/reference/sql/statements/begin.md new file mode 100644 index 000000000000..96093957e93b --- /dev/null +++ b/dev/reference/sql/statements/begin.md @@ -0,0 +1,44 @@ +--- +title: BEGIN +summary: TiDB 数据库中 BEGIN 的使用概况。 +category: reference +--- + +# BEGIN + +`BEGIN` 语句用于在 TiDB 内启动一个新事务,类似于 `START TRANSACTION` 和 `SET autocommit=0` 语句。 + +在没有 `BEGIN` 语句的情况下,每个语句默认在各自的事务中自动提交,从而确保 MySQL 兼容性。 + + +## 语法图 + +**BeginTransactionStmt:** + +![BeginTransactionStmt](/media/sqlgram/BeginTransactionStmt.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a int NOT NULL PRIMARY KEY); +Query OK, 0 rows affected (0.12 sec) + +mysql> BEGIN; +Query OK, 0 rows affected (0.00 sec) + +mysql> INSERT INTO t1 VALUES (1); +Query OK, 1 row affected (0.00 sec) + +mysql> COMMIT; +Query OK, 0 rows affected (0.01 sec) +``` + +## MySQL 兼容性 + +`BEGIN` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上[提交 issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [COMMIT](/dev/reference/sql/statements/commit.md) +* [ROLLBACK](/dev/reference/sql/statements/rollback.md) +* [START TRANSACTION](/dev/reference/sql/statements/start-transaction.md) diff --git a/dev/reference/sql/statements/change-column.md b/dev/reference/sql/statements/change-column.md new file mode 100644 index 000000000000..bcc95bc5bb37 --- /dev/null +++ b/dev/reference/sql/statements/change-column.md @@ -0,0 +1,75 @@ +--- +title: CHANGE COLUMN +summary: TiDB 数据库中 CHANGE COLUMN 的使用概况。 +category: reference +--- + +# CHANGE COLUMN + +`ALTER TABLE.. CHANGE COLUMN` 语句用于在已有表上更改列,包括对列进行重命名,和将数据改为兼容类型。 + +## 语法图 + +**AlterTableStmt:** + +![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) + +**AlterTableSpec:** + +![AlterTableSpec](/media/sqlgram/AlterTableSpec.png) + +**ColumnKeywordOpt:** + +![ColumnKeywordOpt](/media/sqlgram/ColumnKeywordOpt.png) + +**ColumnName:** + +![ColumnName](/media/sqlgram/ColumnName.png) + +**ColumnDef:** + +![ColumnDef](/media/sqlgram/ColumnDef.png) + +**ColumnPosition:** + +![ColumnPosition](/media/sqlgram/ColumnPosition.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (id int not null primary key auto_increment, col1 INT); +Query OK, 0 rows affected (0.11 sec) + +mysql> INSERT INTO t1 (col1) VALUES (1),(2),(3),(4),(5); +Query OK, 5 rows affected (0.02 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +mysql> +mysql> ALTER TABLE t1 CHANGE col1 col2 INT; +Query OK, 0 rows affected (0.09 sec) + +mysql> ALTER TABLE t1 CHANGE col2 col3 BIGINT, ALGORITHM=INSTANT; +Query OK, 0 rows affected (0.08 sec) + +mysql> +mysql> ALTER TABLE t1 CHANGE col3 col3 INT; +ERROR 1105 (HY000): unsupported modify column length 11 is less than origin 20 +mysql> ALTER TABLE t1 CHANGE col3 col3 BLOB; +ERROR 1105 (HY000): unsupported modify column type 252 not match origin 8 +mysql> ALTER TABLE t1 CHANGE col3 col4 BIGINT, CHANGE id id2 INT NOT NULL; +ERROR 1105 (HY000): can't run multi schema change +``` + + +## MySQL 兼容性 + +* 目前尚不支持在单个 `ALTER TABLE` 语句中进行多个更改。 +* 仅支持特定的数据类型更改。例如,支持将 `INTEGER` 更改为 `BIGINT`,但不支持将 `BIGINT` 更改为 `INTEGER`。不支持从整数更改为字符串格式或 BLOB 类型。 + +## 另请参阅 + +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) +* [ADD COLUMN](/dev/reference/sql/statements/add-column.md) +* [DROP COLUMN](/dev/reference/sql/statements/drop-column.md) +* [MODIFY COLUMN](/dev/reference/sql/statements/modify-column.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/commit.md b/dev/reference/sql/statements/commit.md new file mode 100644 index 000000000000..e314d5f8f29d --- /dev/null +++ b/dev/reference/sql/statements/commit.md @@ -0,0 +1,45 @@ +--- +title: COMMIT +summary: TiDB 数据库中 COMMIT 的使用概况。 +category: reference +--- + +# COMMIT + +`COMMIT` 语句用于在 TiDB 服务器内部提交事务。 + +在不使用 `BEGIN` 或 `START TRANSACTION` 语句的情况下,TiDB 中每一个查询语句本身也会默认作为事务处理,自动提交,确保了与 MySQL 的兼容。 + +## 语法图 + +**CommitStmt:** + +![CommitStmt](/media/sqlgram/CommitStmt.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a int NOT NULL PRIMARY KEY); +Query OK, 0 rows affected (0.12 sec) + +mysql> START TRANSACTION; +Query OK, 0 rows affected (0.00 sec) + +mysql> INSERT INTO t1 VALUES (1); +Query OK, 1 row affected (0.00 sec) + +mysql> COMMIT; +Query OK, 0 rows affected (0.01 sec) +``` + +## MySQL 兼容性 + +* 在 MySQL 中,除了有多个 primary 的群组复制以外,`COMMIT` 语句通常不会导致错误。相比之下,TiDB 使用乐观并发控制,冲突可能导致 `COMMIT` 返回错误。 +* 默认情况下,`UNIQUE` 和 `PRIMARY KEY` 约束检查将延迟直至语句提交。可通过设置 `tidb_constraint_check_in_place=TRUE` 来改变该行为。 + +## 另请参阅 + +* [START TRANSACTION](/dev/reference/sql/statements/start-transaction.md) +* [ROLLBACK](/dev/reference/sql/statements/rollback.md) +* [BEGIN](/dev/reference/sql/statements/begin.md) +* [Lazy checking of constraints](/sql/transaction.md#lazy-check-of-constraints) \ No newline at end of file diff --git a/dev/reference/sql/statements/create-database.md b/dev/reference/sql/statements/create-database.md new file mode 100644 index 000000000000..fe2eb68a7a89 --- /dev/null +++ b/dev/reference/sql/statements/create-database.md @@ -0,0 +1,62 @@ +--- +title: CREATE DATABASE +summary: TiDB 数据库中 CREATE DATABASE 的使用概况。 +category: reference +--- + +# CREATE DATABASE + +`CREATE DATABASE` 语句用于在 TiDB 上创建新数据库。按照 SQL 标准,“数据库” 一词在 MySQL 术语中最接近 “schema”。 + +## 语法图 + +**CreateDatabaseStmt:** + +![CreateDatabaseStmt](/media/sqlgram/CreateDatabaseStmt.png) + +**DatabaseSym:** + +![DatabaseSym](/media/sqlgram/DatabaseSym.png) + +**IfNotExists:** + +![IfNotExists](/media/sqlgram/IfNotExists.png) + +**DBName:** + +![DBName](/media/sqlgram/DBName.png) + +**DatabaseOptionListOpt:** + +![DatabaseOptionListOpt](/media/sqlgram/DatabaseOptionListOpt.png) + +## 示例 + +```sql +mysql> CREATE DATABASE mynewdatabase; +Query OK, 0 rows affected (0.09 sec) + +mysql> USE mynewdatabase; +Database changed +mysql> CREATE TABLE t1 (a int); +Query OK, 0 rows affected (0.11 sec) + +mysql> SHOW TABLES; ++-------------------------+ +| Tables_in_mynewdatabase | ++-------------------------+ +| t1 | ++-------------------------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +`CREATE DATABASE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [USE](/dev/reference/sql/statements/use.md) +* [ALTER DATABASE](/dev/reference/sql/statements/alter-database.md) +* [DROP DATABASE](/dev/reference/sql/statements/drop-database.md) +* [SHOW CREATE DATABASE](/dev/reference/sql/statements/show-create-database.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/create-index.md b/dev/reference/sql/statements/create-index.md new file mode 100644 index 000000000000..9f7432347ccd --- /dev/null +++ b/dev/reference/sql/statements/create-index.md @@ -0,0 +1,98 @@ +--- +title: CREATE INDEX +summary: CREATE INDEX 在 TiDB 中的使用概况 +category: reference +--- + +# CREATE INDEX + +`CREATE INDEX` 语句用于在已有表中添加新索引,功能等同于 `ALTER TABLE .. ADD INDEX`。包含该语句提供了 MySQL 兼容性。 + +## 语法图 + +**CreateIndexStmt:** + +![CreateIndexStmt](/media/sqlgram/CreateIndexStmt.png) + +**CreateIndexStmtUnique:** + +![CreateIndexStmtUnique](/media/sqlgram/CreateIndexStmtUnique.png) + +**Identifier:** + +![Identifier](/media/sqlgram/Identifier.png) + +**IndexTypeOpt:** + +![IndexTypeOpt](/media/sqlgram/IndexTypeOpt.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +**IndexColNameList:** + +![IndexColNameList](/media/sqlgram/IndexColNameList.png) + +**IndexOptionList:** + +![IndexOptionList](/media/sqlgram/IndexOptionList.png) + +**IndexOption:** + +![IndexOption](/media/sqlgram/IndexOption.png) + + +## 示例 + +```sql +mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY auto_increment, c1 INT NOT NULL); +Query OK, 0 rows affected (0.10 sec) + +mysql> INSERT INTO t1 (c1) VALUES (1),(2),(3),(4),(5); +Query OK, 5 rows affected (0.02 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +mysql> EXPLAIN SELECT * FROM t1 WHERE c1 = 3; ++---------------------+----------+------+-------------------------------------------------------------+ +| id | count | task | operator info | ++---------------------+----------+------+-------------------------------------------------------------+ +| TableReader_7 | 10.00 | root | data:Selection_6 | +| └─Selection_6 | 10.00 | cop | eq(test.t1.c1, 3) | +| └─TableScan_5 | 10000.00 | cop | table:t1, range:[-inf,+inf], keep order:false, stats:pseudo | ++---------------------+----------+------+-------------------------------------------------------------+ +3 rows in set (0.00 sec) + +mysql> CREATE INDEX c1 ON t1 (c1); +Query OK, 0 rows affected (0.30 sec) + +mysql> EXPLAIN SELECT * FROM t1 WHERE c1 = 3; ++-------------------+-------+------+-----------------------------------------------------------------+ +| id | count | task | operator info | ++-------------------+-------+------+-----------------------------------------------------------------+ +| IndexReader_6 | 10.00 | root | index:IndexScan_5 | +| └─IndexScan_5 | 10.00 | cop | table:t1, index:c1, range:[3,3], keep order:false, stats:pseudo | ++-------------------+-------+------+-----------------------------------------------------------------+ +2 rows in set (0.00 sec) + +mysql> ALTER TABLE t1 DROP INDEX c1; +Query OK, 0 rows affected (0.30 sec) + +mysql> CREATE UNIQUE INDEX c1 ON t1 (c1); +Query OK, 0 rows affected (0.31 sec) +``` + +## MySQL 兼容性 + +* 不支持 `FULLTEXT`,`HASH` 和 `SPATIAL` 索引。 +* 不支持降序索引 (类似于 MySQL 5.7)。 +* 无法向表中添加 `PRIMARY KEY`。 + +## 另请参阅 + +* [ADD INDEX](/dev/reference/sql/statements/add-index.md) +* [DROP INDEX](/dev/reference/sql/statements/drop-index.md) +* [RENAME INDEX](/dev/reference/sql/statements/rename-index.md) +* [ADD COLUMN](/dev/reference/sql/statements/add-column.md) +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [EXPLAIN](/dev/reference/sql/statements/explain.md) diff --git a/dev/reference/sql/statements/create-table-like.md b/dev/reference/sql/statements/create-table-like.md new file mode 100644 index 000000000000..a389a85348f9 --- /dev/null +++ b/dev/reference/sql/statements/create-table-like.md @@ -0,0 +1,61 @@ +--- +title: CREATE TABLE LIKE +summary: TiDB 数据库中 CREATE TABLE AS 的使用概况。 +category: reference +--- + +# CREATE TABLE LIKE + +`CREATE TABLE LIKE` 语句用于复制已有表的定义,但不复制任何数据。 + +## 语法图 + +**CreateTableStmt:** + +![CreateTableStmt](/media/sqlgram/CreateTableStmt.png) + +**LikeTableWithOrWithoutParen:** + +![LikeTableWithOrWithoutParen](/media/sqlgram/LikeTableWithOrWithoutParen.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a INT NOT NULL); +Query OK, 0 rows affected (0.13 sec) + +mysql> INSERT INTO t1 VALUES (1),(2),(3),(4),(5); +Query OK, 5 rows affected (0.02 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +mysql> SELECT * FROM t1; ++---+ +| a | ++---+ +| 1 | +| 2 | +| 3 | +| 4 | +| 5 | ++---+ +5 rows in set (0.00 sec) + +mysql> CREATE TABLE t2 LIKE t1; +Query OK, 0 rows affected (0.10 sec) + +mysql> SELECT * FROM t2; +Empty set (0.00 sec) +``` + +## MySQL 兼容性 + +`CREATE TABLE LIKE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/create-table.md b/dev/reference/sql/statements/create-table.md new file mode 100644 index 000000000000..d35c8acf1d2c --- /dev/null +++ b/dev/reference/sql/statements/create-table.md @@ -0,0 +1,102 @@ +--- +title: CREATE TABLE +summary: TiDB 数据库中 CREATE TABLE 的使用概况 +category: reference +aliases: ['/docs-cn/sql/ddl/','/docs-cn/dev/reference/sql/statements/ddl/'] +--- + +# CREATE TABLE + +`CREATE TABLE` 语句用于在当前所选数据库中创建新表。另可参阅单独的 `CREATE TABLE AS` 文档。 + +## 语法图 + +**CreateTableStmt:** + +![CreateTableStmt](/media/sqlgram/CreateTableStmt.png) + +**IfNotExists:** + +![IfNotExists](/media/sqlgram/IfNotExists.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +**TableElementListOpt:** + +![TableElementListOpt](/media/sqlgram/TableElementListOpt.png) + +**TableElement:** + +![TableElement](/media/sqlgram/TableElement.png) + +**PartitionOpt:** + +![PartitionOpt](/media/sqlgram/PartitionOpt.png) + +**ColumnDef:** + +![ColumnDef](/media/sqlgram/ColumnDef.png) + +**ColumnName:** + +![ColumnName](/media/sqlgram/ColumnName.png) + +**Type:** + +![Type](/media/sqlgram/Type.png) + +**ColumnOptionListOpt:** + +![ColumnOptionListOpt](/media/sqlgram/ColumnOptionListOpt.png) + +**TableOptionListOpt:** + +![TableOptionListOpt](/media/sqlgram/TableOptionListOpt.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a int); +Query OK, 0 rows affected (0.11 sec) + +mysql> CREATE TABLE t2 LIKE t1; +Query OK, 0 rows affected (0.10 sec) + +mysql> DESC t1; ++-------+---------+------+------+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+---------+------+------+---------+-------+ +| a | int(11) | YES | | NULL | | ++-------+---------+------+------+---------+-------+ +1 row in set (0.00 sec) + +mysql> INSERT INTO t1 VALUES (1); +Query OK, 1 row affected (0.02 sec) + +mysql> SELECT * FROM t1; ++------+ +| a | ++------+ +| 1 | ++------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +* TiDB 不支持 `CREATE TEMPORARY TABLE` 语法。 +* 支持除空间类型以外的所有数据类型。 +* 不支持 `FULLTEXT`,`HASH` 和 `SPATIAL` 索引。 +* `KEY_BLOCK_SIZE` 和 `ENGINE` 属性可被解析,但会被忽略。 +* `index_col_name` 属性支持 length 选项,最大长度限制为 3072 字节。此长度限制不会更改,具体取决于存储引擎和建表时使用的字符集。 +* `index_col_name` 属性支持 `ASC` 和 `DESC` 的索引排序选项。 +* `COMMENT` 属性最多支持 1024 个字符,不支持 `WITH PARSER` 选项。 +* TiDB 在单个表中最多支持 512 列。InnoDB 中相应的数量限制为 1017,MySQL 中的硬限制为 4096。 + +## 另请参阅 + +* [DROP TABLE](/dev/reference/sql/statements/drop-table.md) +* [CREATE TABLE LIKE](/dev/reference/sql/statements/create-table-like.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/create-user.md b/dev/reference/sql/statements/create-user.md new file mode 100644 index 000000000000..eacefae4f77e --- /dev/null +++ b/dev/reference/sql/statements/create-user.md @@ -0,0 +1,57 @@ +--- +title: CREATE USER +summary: TiDB 数据库中 CREATE USER 的使用概况。 +category: reference +--- + +# CREATE USER + +`CREATE USER` 语句用于创建带有指定密码的新用户。和 MySQL 一样,在 TiDB 权限系统中,用户是用户名和用户名所连接主机的组合。因此,可创建一个用户 `'newuser2'@'192.168.1.1'`,使其只能通过 IP 地址 `192.168.1.1` 进行连接。相同的用户名从不同主机登录时可能会拥有不同的权限。 + +## 语法图 + +**CreateUserStmt:** + +![CreateUserStmt](/media/sqlgram/CreateUserStmt.png) + +**IfNotExists:** + +![IfNotExists](/media/sqlgram/IfNotExists.png) + +**UserSpecList:** + +![UserSpecList](/media/sqlgram/UserSpecList.png) + +**UserSpec:** + +![UserSpec](/media/sqlgram/UserSpec.png) + +**AuthOption:** + +![AuthOption](/media/sqlgram/AuthOption.png) + +**StringName:** + +![StringName](/media/sqlgram/StringName.png) + +## 示例 + +```sql +mysql> CREATE USER 'newuser' IDENTIFIED BY 'newuserpassword'; +Query OK, 1 row affected (0.04 sec) + +mysql> CREATE USER 'newuser2'@'192.168.1.1' IDENTIFIED BY 'newuserpassword'; +Query OK, 1 row affected (0.02 sec) +``` + +## MySQL 兼容性 + +* TiDB 尚不支持若干 `CREATE` 选项。这些选项可被解析,但会被忽略。 + +## 另请参阅 + +* [Security Compatibility with MySQL](/dev/reference/security/compatibility.md) +* [DROP USER](/dev/reference/sql/statements/drop-user.md) +* [SHOW CREATE USER](/dev/reference/sql/statements/show-create-user.md) +* [ALTER USER](/dev/reference/sql/statements/alter-user.md) +* [Privilege Management](/dev/reference/security/privilege-system.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/create-view.md b/dev/reference/sql/statements/create-view.md new file mode 100644 index 000000000000..aae9ee9b0c24 --- /dev/null +++ b/dev/reference/sql/statements/create-view.md @@ -0,0 +1,106 @@ +--- +title: CREATE VIEW +summary: TiDB 数据库中 CREATE VIEW 的使用概况。 +category: reference +--- + +# CREATE VIEW + +使用 `CREATE VIEW` 语句将 `SELECT` 语句保存为类似于表的可查询对象。TiDB 中的视图是非物化的,这意味着在查询视图时,TiDB 将在内部重写查询,以将视图定义与 SQL 查询结合起来。 + +## 语法图 + +**CreateViewStmt:** + +![CreateViewStmt](/media/sqlgram/CreateViewStmt.png) + +**OrReplace:** + +![OrReplace](/media/sqlgram/OrReplace.png) + +**ViewAlgorithm:** + +![ViewAlgorithm](/media/sqlgram/ViewAlgorithm.png) + +**ViewDefiner:** + +![ViewDefiner](/media/sqlgram/ViewDefiner.png) + +**ViewSQLSecurity:** + +![ViewSQLSecurity](/media/sqlgram/ViewSQLSecurity.png) + +**ViewName:** + +![ViewName](/media/sqlgram/ViewName.png) + +**ViewFieldList:** + +![ViewFieldList](/media/sqlgram/ViewFieldList.png) + +**ViewCheckOption:** + +![ViewCheckOption](/media/sqlgram/ViewCheckOption.png) + +## 示例 + +```sql +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 中的视图不可插入且不可更新。 + +## 另请参阅 + +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) +* [DROP TABLE](/dev/reference/sql/statements/drop-table.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/ddl.md b/dev/reference/sql/statements/ddl.md deleted file mode 100644 index 2dadf654fb56..000000000000 --- a/dev/reference/sql/statements/ddl.md +++ /dev/null @@ -1,406 +0,0 @@ ---- -title: 数据定义语言 -category: reference -aliases: ['/docs-cn/sql/ddl/'] ---- - -# 数据定义语言 - -DDL(Data Definition Language)用于定义和管理数据库以及数据库中各种对象的语句。 - -目前 TiDB 实现了 `ADD INDEX` 操作和 `GENERAL` 操作(除了 `ADD INDEX` 以外的 DDL 操作)在表间的并行。即在不同表之间,`ADD INDEX` 操作和 `GENERAL` 操作可以并行执行。也可以认为目前有两个 worker 分别处理 `ADD INDEX` 操作和 `GENERAL` 操作,当处理的请求是同一个表内的操作时,按接受到 DDL 请求的先后顺序来执行。该功能是为了初步且稳定地解决 `ADD INDEX` 操作(当前 TiDB 中只有 `ADD INDEX` 操作的执行时间会比较久)可能阻塞其他 DDL 操作的问题。 - -## CREATE DATABASE 语法 - -```sql -CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name - [create_specification] ... - -create_specification: - [DEFAULT] CHARACTER SET [=] charset_name - | [DEFAULT] COLLATE [=] collation_name -``` - -`CREATE DATABASE` 用于创建数据库,并可以指定数据库的默认属性(如数据库默认字符集、排序规则)。`CREATE SCHEMA` 跟 `CREATE DATABASE` 操作效果一样。 - -当创建已存在的数据库且不指定使用 `IF NOT EXISTS` 时会报错。 - -`create_specification` 选项用于指定数据库具体的 `CHARACTER SET` 和 `COLLATE`。目前 TiDB 只支持部分的字符集和排序规则,请参照[字符集支持](/dev/reference/sql/character-set.md)。 - -## ALTER DATABASE 语法 - -```sql -ALTER {DATABASE | SCHEMA} [db_name] - alter_specification ... - -alter_specification: - [DEFAULT] CHARACTER SET [=] charset_name - | [DEFAULT] COLLATE [=] collation_name -``` - -`ALTER DATABASE` 用于修改或指定当前数据库的默认字符集和排序规则。`ALTER SCHEMA` 跟 `ALTER DATABASE` 操作效果一样。 - -`alter_specification` 选项用于指定数据库具体的 `CHARACTER SET` 和 `COLLATE`。目前 TiDB 只支持部分的字符集和排序规则,请参照[字符集支持](/dev/reference/sql/character-set.md)。 - -## DROP DATABASE 语法 - -```sql -DROP {DATABASE | SCHEMA} [IF EXISTS] db_name -``` - -`DROP DATABASE` 用于删除指定数据库以及它其中的所有表格。 - -`IF EXISTS` 用于防止当数据库不存在时发生错误。 - -## CREATE TABLE 语法 - -```sql -CREATE TABLE [IF NOT EXISTS] tbl_name - (create_definition,...) - [table_options] - -CREATE TABLE [IF NOT EXISTS] tbl_name - { LIKE old_tbl_name | (LIKE old_tbl_name) } - -create_definition: - col_name column_definition - | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) - [index_option] ... - | {INDEX|KEY} [index_name] [index_type] (index_col_name,...) - [index_option] ... - | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] - [index_name] [index_type] (index_col_name,...) - [index_option] ... - | {FULLTEXT} [INDEX|KEY] [index_name] (index_col_name,...) - [index_option] ... - | [CONSTRAINT [symbol]] FOREIGN KEY - [index_name] (index_col_name,...) reference_definition - -column_definition: - data_type [NOT NULL | NULL] [DEFAULT default_value] - [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] - [COMMENT 'string'] - [reference_definition] - | data_type [GENERATED ALWAYS] AS (expression) - [VIRTUAL | STORED] [UNIQUE [KEY]] [COMMENT comment] - [NOT NULL | NULL] [[PRIMARY] KEY] - -data_type: - BIT[(length)] - | TINYINT[(length)] [UNSIGNED] [ZEROFILL] - | SMALLINT[(length)] [UNSIGNED] [ZEROFILL] - | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] - | INT[(length)] [UNSIGNED] [ZEROFILL] - | INTEGER[(length)] [UNSIGNED] [ZEROFILL] - | BIGINT[(length)] [UNSIGNED] [ZEROFILL] - | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] - | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] - | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] - | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL] - | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL] - | DATE - | TIME[(fsp)] - | TIMESTAMP[(fsp)] - | DATETIME[(fsp)] - | YEAR - | CHAR[(length)] [BINARY] - [CHARACTER SET charset_name] [COLLATE collation_name] - | VARCHAR(length) [BINARY] - [CHARACTER SET charset_name] [COLLATE collation_name] - | BINARY[(length)] - | VARBINARY(length) - | TINYBLOB - | BLOB - | MEDIUMBLOB - | LONGBLOB - | TINYTEXT [BINARY] - [CHARACTER SET charset_name] [COLLATE collation_name] - | TEXT [BINARY] - [CHARACTER SET charset_name] [COLLATE collation_name] - | MEDIUMTEXT [BINARY] - [CHARACTER SET charset_name] [COLLATE collation_name] - | LONGTEXT [BINARY] - [CHARACTER SET charset_name] [COLLATE collation_name] - | ENUM(value1,value2,value3,...) - [CHARACTER SET charset_name] [COLLATE collation_name] - | SET(value1,value2,value3,...) - [CHARACTER SET charset_name] [COLLATE collation_name] - | JSON - -index_col_name: - col_name [(length)] [ASC | DESC] - -index_type: - USING {BTREE | HASH} - -index_option: - KEY_BLOCK_SIZE [=] value - | index_type - | COMMENT 'string' - -reference_definition: - REFERENCES tbl_name (index_col_name,...) - [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE] - [ON DELETE reference_option] - [ON UPDATE reference_option] - -reference_option: - RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT - -table_options: - table_option [[,] table_option] ... - -table_option: - AUTO_INCREMENT [=] value - | AVG_ROW_LENGTH [=] value - | SHARD_ROW_ID_BITS [=] value - | PRE_SPLIT_REGIONS [=] value - | [DEFAULT] CHARACTER SET [=] charset_name - | CHECKSUM [=] {0 | 1} - | [DEFAULT] COLLATE [=] collation_name - | COMMENT [=] 'string' - | COMPRESSION [=] {'ZLIB'|'LZ4'|'NONE'} - | CONNECTION [=] 'connect_string' - | DELAY_KEY_WRITE [=] {0 | 1} - | ENGINE [=] engine_name - | KEY_BLOCK_SIZE [=] value - | MAX_ROWS [=] value - | MIN_ROWS [=] value - | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} - | STATS_PERSISTENT [=] {DEFAULT|0|1} -``` - -`CREATE TABLE` 用于创建一个表。目前不支持临时表,不支持 `CHECK` 约束,不支持创建表的同时从其它表导入数据功能。 -在语法上也支持一些 `Partition_options`,但是并不完全,就不做列举了。 - -* 使用 `IF NOT EXIST` 时,即使创建的表已经存在,也不会报错,如果不指定时,则报错。 - -* 使用 `LIKE` 基于一个表的定义创建一个空表,包括这个表中的列属性和索引属性。 - -* `create_definition` 中 `FULLTEXT` 和 `FOREIGN KEY` 目前只是语法上支持 - -* `data_type` 请参考[数据类型](/dev/reference/sql/data-types.md)章节。 - -* `index_col_name` 中 `[ASC | DESC]` 目前只是语法上支持。 - -* `index_type` 目前只是语法上支持。 - -* `index_option` 中 `KEY_BLOCK_SIZE` 目前只是语法上支持。 - -* `table_option` 目前支持的只有 `AUTO_INCREMENT`、`SHARD_ROW_ID_BITS`(详情介绍请参考 [TiDB 专用系统变量和语法](/dev/reference/configuration/tidb-server/tidb-specific-variables.md#shard_row_id_bits))、`PRE_SPLIT_REGIONS`、`CHARACTER SET`、`COLLATE` 和 `COMMENT`,其它只是语法上支持。具体内容参考下表,各个子句之间用逗号隔开。 - - | 参数 |含义 |举例 | - |----------------|--------------------------------------|----------------------------| - |`AUTO_INCREMENT`|自增字段初始值 |`AUTO_INCREMENT` = 5| - |`SHARD_ROW_ID_BITS`|用来设置隐式 _tidb_rowid 的分片数量的 bit 位数 |`SHARD_ROW_ID_BITS` = 4| - |`PRE_SPLIT_REGIONS`|用来在建表时预先均匀切分 2^(PRE_SPLIT_REGIONS-1) 个 Region |`PRE_SPLIT_REGIONS` = 4| - |`CHARACTER SET` |指定该表所使用的字符集 | `CHARACTER SET` = 'utf8mb4'| - |`COLLATE` |指定该表所使用的字符集排序规则 | `COLLATE` = 'utf8mb4_bin'| - |`COMMENT` |注释信息 | `COMMENT` = 'comment info' | - -* `split-table` 配置项默认情况下会开启,在此配置项开启时,建表操作会为每个表建立单独的 Region。 - -### AUTO_INCREMENT 说明 - -TiDB 的自增 ID (`AUTO_INCREMENT` ID) 只保证自增且唯一,并不保证连续分配。TiDB 目前采用批量分配的方式,所以如果在多台 TiDB 上同时插入数据,分配的自增 ID 会不连续。 - -允许给整型类型的字段指定 `AUTO_INCREMENT`,且一个表只允许一个属性为 `AUTO_INCREMENT` 的字段。 - -## DROP TABLE 语法 - -```sql -DROP TABLE [IF EXISTS] - tbl_name [, tbl_name] ... - [RESTRICT | CASCADE] -``` - -可以同时删除多个表,表之间用 `,` 隔开。 - -当删除不存在的表时且不指定使用 `IF EXISTS` 时会报错。 - -关键字 RESTRICT 和 CASCADE 没有实际效果。其作用是与其他数据库兼容。 - -## RECOVER TABLE 语法 - -```sql -# 根据表名来恢复删除的表。 -RECOVER TABLE tbl_name - -# 根据 drop table 时的 DDL job ID 来恢复删除的表。 -RECOVER TABLE BY JOB job_id -``` - -用来恢复被删除的表。能够恢复的前提条件是还没有超过 GC 时间。因为超过 GC 时间后数据会被 GC,就无法恢复了。 - -## TRUNCATE TABLE 语法 - -```sql -TRUNCATE [TABLE] tbl_name -``` - -`TRUNCATE TABLE` 用于清除指定表中所有数据,但是保留表结构。 - -此操作于删除指定表全表数据的操作类似,但是操作的执行速度会远快于删除全表的速度,且不受表内数据行数影响。 - -> **注意:** -> -> 使用此语句后,原先表内的 `AUTO_INCREMENT` 的值不会记录,会被重新计数。 - -## RENAME TABLE 语法 - -```sql -RENAME TABLE - tbl_name TO new_tbl_name -``` - -`RENAME TABLE` 用于对一个表进行重命名。 - -这个语句等价于如下的 `ALTER TABLE` 语句: - -```sql -ALTER TABLE old_table RENAME new_table; -``` - -## ALTER TABLE 语法 - -```sql -ALTER TABLE tbl_name - [alter_specification] - -alter_specification: - table_options - | ADD [COLUMN] col_name column_definition - [FIRST | AFTER col_name] - | ADD [COLUMN] (col_name column_definition,...) - | ADD {INDEX|KEY} [index_name] - [index_type] (index_col_name,...) [index_option] ... - | ADD [CONSTRAINT [symbol]] PRIMARY KEY - [index_type] (index_col_name,...) [index_option] ... - | ADD [CONSTRAINT [symbol]] - UNIQUE [INDEX|KEY] [index_name] - [index_type] (index_col_name,...) [index_option] ... - | ADD FULLTEXT [INDEX|KEY] [index_name] - (index_col_name,...) [index_option] ... - | ADD [CONSTRAINT [symbol]] - FOREIGN KEY [index_name] (index_col_name,...) - reference_definition - | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} - | CHANGE [COLUMN] old_col_name new_col_name column_definition - [FIRST|AFTER col_name] - | {DISABLE|ENABLE} KEYS - | DROP [COLUMN] col_name - | DROP {INDEX|KEY} index_name - | DROP PRIMARY KEY - | DROP FOREIGN KEY fk_symbol - | LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE} - | MODIFY [COLUMN] col_name column_definition - [FIRST | AFTER col_name] - | RENAME [TO|AS] new_tbl_name - | {WITHOUT|WITH} VALIDATION - -index_col_name: - col_name [(length)] [ASC | DESC] - -index_type: - USING {BTREE | HASH} - -index_option: - KEY_BLOCK_SIZE [=] value - | index_type - | COMMENT 'string' - -table_options: - table_option [[,] table_option] ... - -table_option: - AVG_ROW_LENGTH [=] value - | [DEFAULT] CHARACTER SET [=] charset_name - | CHECKSUM [=] {0 | 1} - | [DEFAULT] COLLATE [=] collation_name - | COMMENT [=] 'string' - | COMPRESSION [=] {'ZLIB'|'LZ4'|'NONE'} - | CONNECTION [=] 'connect_string' - | DELAY_KEY_WRITE [=] {0 | 1} - | ENGINE [=] engine_name - | KEY_BLOCK_SIZE [=] value - | MAX_ROWS [=] value - | MIN_ROWS [=] value - | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} - | STATS_PERSISTENT [=] {DEFAULT|0|1} -``` - -`ALTER TABLE` 用于修改已存在的表的结构,比如:修改表及表属性、新增或删除列、创建或删除索引、修改列及属性等。以下是几个字段类型的描述: - -* `index_col_name`、`index_type` 和 `index_option` 可以参考 [CREATE INDEX 语法](#create-index-语法)。 - -* `table_option` 目前支持的修改类型为 `AUTO_INCREMENT` 和 `COMMENT`,其它的只是语法上支持。 - -下面介绍一下具体操作类型的支持情况。 - -* `ADD/DROP INDEX/COLUMN` 操作目前不支持同时创建或删除多个索引或列。 - -* `ADD/DROP PRIMARY KEY` 操作目前不支持。 - -* `DROP COLUMN` 操作目前不支持删除的列为主键列或索引列。 - -* `ADD COLUMN` 操作目前不支持同时将新添加的列设为主键或唯一索引,也不支持将此列设成 `AUTO_INCREMENT` 属性。 - -* `CHANGE/MODIFY COLUMN` 操作目前支持部分语法,细节如下: - - 在修改类型方面,只支持整数类型之间修改,字符串类型之间修改和 Blob 类型之间的修改,且只能使原类型长度变长。此外,不能改变列的 `unsigned`/`charset`/`collate` 属性。这里的类型分类如下: - - 具体支持的整型类型有:`TinyInt`,`SmallInt`,`MediumInt`,`Int`,`BigInt`。 - - 具体支持的字符串类型有:`Char`,`Varchar`,`Text`,`TinyText`,`MediumText`,`LongText`。 - - 具体支持的 Blob 类型有:`Blob`,`TinyBlob`,`MediumBlob`,`LongBlob`。 - - 在修改类型定义方面,支持的包括 `default value`,`comment`,`null`,`not null` 和 `OnUpdate`。 - - 不支持对 `enum` 类型的列进行修改 - -* `LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}` 目前只是语法支持。 - -## CREATE INDEX 语法 - -```sql -CREATE [UNIQUE] INDEX index_name - [index_type] - ON tbl_name (index_col_name,...) - [index_option] ... - -index_col_name: - col_name [(length)] [ASC | DESC] - -index_option: - KEY_BLOCK_SIZE [=] value - | index_type - | COMMENT 'string' - -index_type: - USING {BTREE | HASH} -``` - -`CREATE INDEX` 语句的作用是为一个已经存在的表创建一个索引。在功能上,`CREATE INDEX` 对应于 `ALTER TABLE` 语句的创建索引功能。与 MySQL 一样 `CREATE INDEX` 不能创建主键索引。 - -### 与 MySQL 的差异 - -* 支持 `UNIQUE` 索引,不支持 `FULLTEXT` 和 `SPATIAL` 索引。 - -* `index_col_name` 支持长度选项,最大长度限制为3072字节,该长度限制不根据建表时使用的存储引擎、字符集而变。这是因为 TiDB 并非使用 Innodb 、 MyISAM 等存储引擎,因此,仅对建表时的存储引擎选项进行了 MySQL 语法上的兼容。对于字符集,TiDB 使用的是 utf8mb4 字符集,对于建表时的字符集选项同样仅有 MySQL 语法上的兼容。详见[与 MySQL 兼容性对比](/dev/reference/mysql-compatibility.md)章节。 - -* `index_col_name` 支持索引排序选项 `ASC` 和 `DESC`。 排序选项行为与 MySQL 一致,仅支持语法解析,内部所有索引都是以正序排列。详见 MySQL 的 [CREATE INDEX Syntax](https://dev.mysql.com/doc/refman/5.7/en/create-index.html) 章节。 - -* `index_option` 支持 `KEY_BLOCK_SIZE` 、`index_type` 和 `COMMENT` 。 `COMMENT` 允许最大1024个字符。不支持 `WITH PARSER` 选项。 - -* `index_type` 支持 `BTREE` 和 `HASH` ,但仅有 MySQL 语法上的支持,即索引类型与建表语句中的存储引擎选项无关。举例:在 MySQL 中,使用 Innodb 的表,在 `CREATE INDEX` 时只能使用 `BTREE` 索引,而在 TiDB 中既可以使用 `BTREE` 也可以使用 `HASH` 。 - -* MySQL 的 `algorithm_option` 和 `lock_option` 选项 TiDB 仅作语法支持。 - -* TiDB 单表最多支持 512 个列。InnoDB 的限制是 1017。MySQL 的硬限制是 4096。详见 MySQL 文档 [Limits on Table Column Count and Row Size](https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html) - -## DROP INDEX 语法 - -```sql -DROP INDEX index_name ON tbl_name -``` - -`DROP INDEX` 用于删除表上的一个索引,目前暂不支持删除主键索引。 - -## ADMIN 语句 - -`ADMIN` 语句可以查看一些跟 DDL 任务相关的信息,具体可以看[这里](/dev/reference/sql/statements/admin.md)。 diff --git a/dev/reference/sql/statements/deallocate.md b/dev/reference/sql/statements/deallocate.md new file mode 100644 index 000000000000..525da53d655f --- /dev/null +++ b/dev/reference/sql/statements/deallocate.md @@ -0,0 +1,53 @@ +--- +title: DEALLOCATE +summary: TiDB 数据库中 DEALLOCATE 的使用概况。 +category: reference +--- + +# DEALLOCATE + +`DEALLOCATE` 语句用于为服务器端预处理语句提供 SQL 接口。 + +## 语法图 + +**DeallocateStmt:** + +![DeallocateStmt](/media/sqlgram/DeallocateStmt.png) + +**DeallocateSym:** + +![DeallocateSym](/media/sqlgram/DeallocateSym.png) + +**Identifier:** + +![Identifier](/media/sqlgram/Identifier.png) + +## 示例 + +```sql +mysql> PREPARE mystmt FROM 'SELECT ? as num FROM DUAL'; +Query OK, 0 rows affected (0.00 sec) + +mysql> SET @number = 5; +Query OK, 0 rows affected (0.00 sec) + +mysql> EXECUTE mystmt USING @number; ++------+ +| num | ++------+ +| 5 | ++------+ +1 row in set (0.00 sec) + +mysql> DEALLOCATE PREPARE mystmt; +Query OK, 0 rows affected (0.00 sec) +``` + +## MySQL 兼容性 + +`DEALLOCATE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [PREPARE](/dev/reference/sql/statements/prepare.md) +* [EXECUTE](/dev/reference/sql/statements/execute.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/delete.md b/dev/reference/sql/statements/delete.md new file mode 100644 index 000000000000..ce0a61c56521 --- /dev/null +++ b/dev/reference/sql/statements/delete.md @@ -0,0 +1,63 @@ +--- +title: DELETE +summary: TiDB 数据库中 DELETE 的使用概况。 +category: reference +--- + +# DELETE + +`DELETE` 语句用于从指定的表中删除行。 + +## 语法图 + +**DeleteFromStmt:** + +![DeleteFromStmt](/media/sqlgram/DeleteFromStmt.png) + +## 示例 + +```sql +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> SELECT * FROM t1; ++----+----+ +| id | c1 | ++----+----+ +| 1 | 1 | +| 2 | 2 | +| 3 | 3 | +| 4 | 4 | +| 5 | 5 | ++----+----+ +5 rows in set (0.00 sec) + +mysql> DELETE FROM t1 WHERE id = 4; +Query OK, 1 row affected (0.02 sec) + +mysql> SELECT * FROM t1; ++----+----+ +| id | c1 | ++----+----+ +| 1 | 1 | +| 2 | 2 | +| 3 | 3 | +| 5 | 5 | ++----+----+ +4 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`DELETE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [INSERT](/dev/reference/sql/statements/insert.md) +* [SELECT](/dev/reference/sql/statements/select.md) +* [UPDATE](/dev/reference/sql/statements/update.md) +* [REPLACE](/dev/reference/sql/statements/replace.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/desc.md b/dev/reference/sql/statements/desc.md new file mode 100644 index 000000000000..e694924e4d9a --- /dev/null +++ b/dev/reference/sql/statements/desc.md @@ -0,0 +1,9 @@ +--- +title: DESC +summary: TiDB 数据库中 DESC 的使用概况。 +category: reference +--- + +# DESC + +`DESC` 语句是 [`EXPLAIN`](/dev/reference/sql/statements/explain.md) 的别名。包含该语句提供了 MySQL 兼容性。 \ No newline at end of file diff --git a/dev/reference/sql/statements/describe.md b/dev/reference/sql/statements/describe.md new file mode 100644 index 000000000000..be81d10c8963 --- /dev/null +++ b/dev/reference/sql/statements/describe.md @@ -0,0 +1,9 @@ +--- +title: DESCRIBE +summary: TiDB 数据库中 DESCRIBE 的使用概况。 +category: reference +--- + +# DESCRIBE + +`DESCRIBE` 语句为 [`EXPLAIN`](/dev/reference/sql/statements/explain.md) 的别名。包含该语句提供了 MySQL 兼容性。 \ No newline at end of file diff --git a/dev/reference/sql/statements/dml.md b/dev/reference/sql/statements/dml.md deleted file mode 100644 index 77c423d2b48e..000000000000 --- a/dev/reference/sql/statements/dml.md +++ /dev/null @@ -1,275 +0,0 @@ ---- -title: 数据操作语言 -category: reference -aliases: ['/docs-cn/sql/dml/'] ---- - -# TiDB 数据操作语言 - -数据操作语言 (Data Manipulation Language, DML) 用于帮助用户实现对数据库的基本操作,比如查询、写入、删除和修改数据库中的数据。 - -TiDB 支持的数据操作语言包括 Select,Insert,Delete,Update 和 Replace。 - -## Select 语句 - -Select 语句用于从数据库中查询数据。 - -### 语法定义 - -```sql -SELECT - [ALL | DISTINCT | DISTINCTROW ] - [HIGH_PRIORITY] - [STRAIGHT_JOIN] - [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] - select_expr [, select_expr ...] - [FROM table_references - [WHERE where_condition] - [GROUP BY {col_name | expr | position} - [ASC | DESC], ...] - [HAVING where_condition] - [ORDER BY {col_name | expr | position} - [ASC | DESC], ...] - [LIMIT {[offset,] row_count | row_count OFFSET offset}] - [FOR UPDATE | LOCK IN SHARE MODE]] -``` - -### 语法元素说明 - -|语法元素 | 说明 | -| --------------------- | -------------------------------------------------- | -|`ALL`、`DISTINCT`、`DISTINCTROW` | 查询结果集中可能会包含重复值。指定 DISTINCT/DISTINCTROW 则在查询结果中过滤掉重复的行;指定 ALL 则列出所有的行。默认为 ALL。| -|`HIGH_PRIORITY` | 该语句为高优先级语句,TiDB 在执行阶段会优先处理这条语句| -|`SQL_CALC_FOUND_ROWS` | TiDB 出于兼容性解析这个语法,但是不做任何处理| -|`SQL_CACHE`、`SQL_NO_CACHE` | 是否把请求结果缓存到 TiKV (RocksDB) 的 `BlockCache` 中。对于一次性的大数据量的查询,比如 `count(*)` 查询,为了避免冲掉 `BlockCache` 中用户的热点数据,建议填上 `SQL_NO_CACHE` | -|`STRAIGHT_JOIN`|`STRAIGHT_JOIN` 会强制优化器按照 `FROM` 子句中所使用的表的顺序做联合查询。当优化器选择的 Join 顺序并不优秀时,你可以使用这个语法来加速查询的执行| -|`select_expr` | 投影操作列表,一般包括列名、表达式,或者是用 '\*' 表示全部列| -|`FROM table_references` | 表示数据来源,数据来源可以是一个表(`select * from t;`)或者是多个表 (`select * from t1 join t2;`) 或者是0个表 (`select 1+1 from dual;`, 等价于 `select 1+1;`)| -|`WHERE where_condition` | Where 子句用于设置过滤条件,查询结果中只会包含满足条件的数据| -|`GROUP BY` | GroupBy 子句用于对查询结果集进行分组| -|`HAVING where_condition` | Having 子句与 Where 子句作用类似,Having 子句可以让过滤 GroupBy 后的各种数据,Where 子句用于在聚合前过滤记录。| -|`ORDER BY` | OrderBy 子句用于指定结果排序顺序,可以按照列、表达式或者是 `select_expr` 列表中某个位置的字段进行排序。| -|`LIMIT` | Limit 子句用于限制结果条数。Limit 接受一个或两个数字参数,如果只有一个参数,那么表示返回数据的最大行数;如果是两个参数,那么第一个参数表示返回数据的第一行的偏移量(第一行数据的偏移量是 0),第二个参数指定返回数据的最大条目数。| -|`FOR UPDATE` | 对查询结果集所有行上锁(对于在查询条件内,但是不在结果集的行,将不会加锁,如事务启动后由其他事务写入的行),以监测其他事务对这些的并发修改。TiDB 使用[乐观事务模型](/dev/reference/transactions/transaction-model.md#事务模型)在语句执行期间不会检测锁,因此,不会像 PostgreSQL 之类的数据库一样,在当前事务结束前阻止其他事务执行 UPDATE、DELETE 和 SELECT FOR UPDATE。在事务的提交阶段 SELECT FOR UPDATE 读到的行,也会进行两阶段提交,因此,它们也可以参与事务冲突检测。如发生写入冲突,那么包含 SELECT FOR UPDATE 语句的事务会提交失败。如果没有冲突,事务将成功提交,当提交结束时,这些被加锁的行,会产生一个新版本,可以让其他尚未提交的事务,在将来提交时发现写入冲突。| -|`LOCK IN SHARE MODE` | TiDB 出于兼容性解析这个语法,但是不做任何处理| - -## Insert 语句 - -Insert 语句用于向数据库中插入数据,TiDB 兼容 MySQL Insert 语句的所有语法。 - -### 语法定义 - -```sql -InsertStatement: -INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] - [INTO] tbl_name - insert_values - [ON DUPLICATE KEY UPDATE assignment_list] - -insert_values: - [(col_name [, col_name] ...)] - {VALUES | VALUE} (expr_list) [, (expr_list)] ... -| SET assignment_list -| [(col_name [, col_name] ...)] - SELECT ... - -expr_list: - expr [, expr] ... - -assignment: - col_name = expr - -assignment_list: - assignment [, assignment] ... -``` - -### 语法元素说明 - -| 语法元素 | 说明 | -| -------------- | --------------------------------------------------------- | -| `LOW_PRIORITY` | 该语句为低优先级语句,TiDB 在执行阶段会降低这条语句的优先级 | -| `DELAYED` | TiDB 出于兼容性解析这个语法,但是不做任何处理 | -| `HIGH_PRIORITY` | 该语句为高优先级语句,TiDB 在执行阶段会优先处理这条语句| -| `IGNORE` | 如果发生 Uniq Key 冲突,则忽略插入的数据,不报错 | -| `tbl_name` | 要插入的表名 | -| `insert_values` | 待插入的数据,下面一节会详细描述 | -| `ON DUPLICATE KEY UPDATE assignment_list` | 如果发生 Uniq Key 冲突,则舍弃要插入的数据,改用 assignment_list 更新已存在的行 | - -### insert_values - -待插入的数据集,可以用以下三种方式指定: - -* Value List - -将被插入的数据值写入列表中,例如: - -```sql -CREATE TABLE tbl_name ( - a int, - b int, - c int -); -INSERT INTO tbl_name VALUES(1,2,3),(4,5,6),(7,8,9); -``` - -上面的例子中,`(1,2,3),(4,5,6),(7,8,9)` 即为 Value List,其中每个括号内部的数据表示一行数据,这个例子中插入了三行数据。Insert 语句也可以只给部分列插入数据,这种情况下,需要在 Value List 之前加上 ColumnName List,如: - -```sql -INSERT INTO tbl_name (a,c) VALUES(1,2),(4,5),(7,8); -``` - -上面的例子中,每行数据只指定了 a 和 c 这两列的值,b 列的值会设为 Null。 - -* Assignment List - -通过赋值列表指定插入的数据,例如: - -```sql -INSERT INTO tbl_name SET a=1, b=2, c=3; -``` - -这种方式每次只能插入一行数据,每列的值通过赋值列表指定。 - -* Select Statement - -待插入的数据集是通过一个 Select 语句获取,要插入的列是通过 Select 语句的 Schema 获得。例如: - -```sql -CREATE TABLE tbl_name1 ( - a int, - b int, - c int -); -INSERT INTO tbl_name SELECT * from tbl_name1; -``` - -上面的例子中,从 `tbl_name1` 中查询出数据,插入 `tbl_name` 中。 - -## Delete 语句 - -Delete 语句用于删除数据库中的数据,TiDB 兼容 MySQL Delete 语句除 PARTITION 之外的所有语法。Delete 语句主要分为单表删除和多表删除两种,下面分开描述。 - -### 单表删除 - -这种语法用于删除的数据只会涉及一个表的情况。 - -### 语法定义 - -```sql -DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name - [WHERE where_condition] - [ORDER BY ...] - [LIMIT row_count] -``` - -### 多表删除 - -这种语法用于删除的数据会涉及多张表的情况。一共有两种写法: - -```sql -DELETE [LOW_PRIORITY] [QUICK] [IGNORE] - tbl_name[.*] [, tbl_name[.*]] ... - FROM table_references - [WHERE where_condition] - -DELETE [LOW_PRIORITY] [QUICK] [IGNORE] - FROM tbl_name[.*] [, tbl_name[.*]] ... - USING table_references - [WHERE where_condition] -``` - -删除多个表的数据的时候,可以用这两种语法。这两种写法都可以指定从多个表查询数据,但只删除其中一些表的数据。在第一种语法中,只会删除 `FROM` 关键字之前的 Table 列表中所列 Table 的表中的数据。对于第二种写法,只会删除 `FROM` 之后 `USING` 之前的 Table 列表中的所列 Table 中的数据。 - -### 语法元素说明 - -| 语法元素 | 说明 | -| -------------- | --------------------------------------------------------- | -| `LOW_PRIORITY` | 该语句为低优先级语句,TiDB 在执行阶段会降低这条语句的优先级 | -| `QUICK` | TiDB 出于兼容性解析这个语法,但是不做任何处理 | -| `IGNORE` | TiDB 出于兼容性解析这个语法,但是不做任何处理| -| `tbl_name` | 要删除数据的表名 | -| `WHERE where_condition` | Where 表达式,只删除满足表达式的那些行 | -| `ORDER BY` | 对待删除数据集进行排序 | -| `LIMIT row_count` | 只对待删除数据集中排序前 row_count 行的内容进行删除 | - -## Update 语句 - -Update 语句用于更新表中的数据。 - -### 语法定义 - -Update 语句一共有两种语法,分别用于更新单表数据和多表数据。 - -### 单表 Update - -```sql -UPDATE [LOW_PRIORITY] [IGNORE] table_reference - SET assignment_list - [WHERE where_condition] - [ORDER BY ...] - [LIMIT row_count] - -assignment: - col_name = value - -assignment_list: - assignment [, assignment] ... -``` - -单表 Update 语句会更新 Table 中现有行的指定列。`SET assignment_list` 指定了要更新的列名,以及要赋予地新值。 Where/OrderBy/Limit 子句一起用于从 Table 中查询出待更新的数据。 - -### 多表 Update - -```sql -UPDATE [LOW_PRIORITY] [IGNORE] table_references - SET assignment_list - [WHERE where_condition] -``` - -多表更新语句用于将 `table_references` 中满足 Where 子句的数据地指定列赋予新的值。 - -### 语法元素说明 - -| 语法元素 | 说明 | -| -------------- | --------------------------------------------------------- | -| `LOW_PRIORITY` | 该语句为低优先级语句,TiDB 在执行阶段会降低这条语句的优先级 | -| `IGNORE` | TiDB 出于兼容性解析这个语法,但是不做任何处理| -| `table_reference` | 待更新的 Table 名称 | -| `table_references` | 待更新的 Table 名称列表 | -| `SET assignment_list` | 待更新的列名以及目标值 | -| `WHERE where_condition` | Where 表达式,只更新满足表达式的那些行 | -| `ORDER BY` | 对待更新数据集进行排序 | -| `LIMIT row_count` | 只对待更新数据集中排序前 row_count 行的内容进行更新 | - -## Replace 语句 - -Replace 语句是 MySQL 对标准 SQL 语法的扩展,其行为和 Insert 语句一样,但是当现有数据中有和待插入数据在 PRIMARY KEY 或者 UNIQUE KEY 冲突的情况下,会先删除旧数据,再插入新数据。 - -### 语法定义 - -```sql -REPLACE [LOW_PRIORITY | DELAYED] - [INTO] tbl_name - [(col_name [, col_name] ...)] - {VALUES | VALUE} (value_list) [, (value_list)] ... - -REPLACE [LOW_PRIORITY | DELAYED] - [INTO] tbl_name - SET assignment_list - -REPLACE [LOW_PRIORITY | DELAYED] - [INTO] tbl_name - [(col_name [, col_name] ...)] - SELECT ... -``` - -### 语法元素说明 - -| 语法元素 | 说明 | -| -------------- | --------------------------------------------------------- | -| `LOW_PRIORITY` | 该语句为低优先级语句,TiDB 在执行阶段会降低这条语句的优先级 | -| `DELAYED` | TiDB 出于兼容性解析这个语法,但是不做任何处理| -| `tbl_name` | 待更新的 Table 名称 | -| `value_list` | 待插入的数据 | -| `SET assignment_list` | 待更新的列名以及目标值 | -| `SELECT ...` | 待插入的数据集,该数据集来自于一个 `Select` 语句 | diff --git a/dev/reference/sql/statements/do.md b/dev/reference/sql/statements/do.md new file mode 100644 index 000000000000..bca96fb5ac58 --- /dev/null +++ b/dev/reference/sql/statements/do.md @@ -0,0 +1,49 @@ +--- +title: DO | TiDB SQL Statement Reference +summary: TiDB 数据库中 DO 的使用概况。 +category: reference +--- + +# DO + +`DO` 语句用于执行表达式,而不返回结果。在 MySQL 中,`DO` 的一个常见用例是执行存储的程序,而无需处理结果。但是 TiDB 不提供存储例程,因此该功能的使用较为受限。 + +## 语法图 + +**DoStmt:** + +![DoStmt](/media/sqlgram/DoStmt.png) + +**ExpressionList:** + +![ExpressionList](/media/sqlgram/ExpressionList.png) + +**Expression:** + +![Expression](/media/sqlgram/Expression.png) + +## 示例 + +```sql +mysql> SELECT SLEEP(5); ++----------+ +| SLEEP(5) | ++----------+ +| 0 | ++----------+ +1 row in set (5.00 sec) + +mysql> DO SLEEP(5); +Query OK, 0 rows affected (5.00 sec) + +mysql> DO SLEEP(1), SLEEP(1.5); +Query OK, 0 rows affected (2.50 sec) +``` + +## MySQL 兼容性 + +`DO` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SELECT](/dev/reference/sql/statements/select.md) diff --git a/dev/reference/sql/statements/drop-column.md b/dev/reference/sql/statements/drop-column.md new file mode 100644 index 000000000000..2c3cbb45b5ba --- /dev/null +++ b/dev/reference/sql/statements/drop-column.md @@ -0,0 +1,90 @@ +--- +title: DROP COLUMN +summary: TiDB 数据库中 DROP COLUMN 的使用概况。 +category: reference +--- + +# DROP COLUMN + +`DROP COLUMN` 语句用于从指定的表中删除列。在 TiDB 中,`COLUMN` 为在线操作,不会阻塞表中的数据读写。 + +## 语法图 + +**AlterTableStmt:** + +![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) + +**AlterTableSpec:** + +![AlterTableSpec](/media/sqlgram/AlterTableSpec.png) + +**ColumnKeywordOpt:** + +![ColumnKeywordOpt](/media/sqlgram/ColumnKeywordOpt.png) + +**ColumnName:** + +![ColumnName](/media/sqlgram/ColumnName.png) + + +## 示例 + +```sql +mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY auto_increment, col1 INT NOT NULL, col2 INT NOT NULL); +Query OK, 0 rows affected (0.12 sec) + +mysql> INSERT INTO t1 (col1,col2) VALUES (1,1),(2,2),(3,3),(4,4),(5,5); +Query OK, 5 rows affected (0.02 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +mysql> SELECT * FROM t1; ++----+------+------+ +| id | col1 | col2 | ++----+------+------+ +| 1 | 1 | 1 | +| 2 | 2 | 2 | +| 3 | 3 | 3 | +| 4 | 4 | 4 | +| 5 | 5 | 5 | ++----+------+------+ +5 rows in set (0.01 sec) + +mysql> ALTER TABLE t1 DROP COLUMN col1, DROP COLUMN col2; +ERROR 1105 (HY000): can't run multi schema change +mysql> SELECT * FROM t1; ++----+------+------+ +| id | col1 | col2 | ++----+------+------+ +| 1 | 1 | 1 | +| 2 | 2 | 2 | +| 3 | 3 | 3 | +| 4 | 4 | 4 | +| 5 | 5 | 5 | ++----+------+------+ +5 rows in set (0.00 sec) + +mysql> ALTER TABLE t1 DROP COLUMN col1; +Query OK, 0 rows affected (0.27 sec) + +mysql> SELECT * FROM t1; ++----+------+ +| id | col2 | ++----+------+ +| 1 | 1 | +| 2 | 2 | +| 3 | 3 | +| 4 | 4 | +| 5 | 5 | ++----+------+ +5 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +* 不支持使用相同语句删除多个列。 + +## 另请参阅 + +* [ADD COLUMN](/dev/reference/sql/statements/add-column.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/drop-database.md b/dev/reference/sql/statements/drop-database.md new file mode 100644 index 000000000000..155b1840e51e --- /dev/null +++ b/dev/reference/sql/statements/drop-database.md @@ -0,0 +1,65 @@ +--- +title: DROP DATABASE +summary: TiDB 数据库中 DROP DATABASE 的使用概况。 +category: reference +--- + +# DROP DATABASE + +`DROP DATABASE` 语句用于永久删除指定的数据库 schema,以及删除所有在 schema 中创建的表和视图。与被删数据库相关联的用户权限不受影响。 + +## 语法图 + +**DropDatabaseStmt:** + +![DropDatabaseStmt](/media/sqlgram/DropDatabaseStmt.png) + +**DatabaseSym:** + +![DatabaseSym](/media/sqlgram/DatabaseSym.png) + +**IfExists:** + +![IfExists](/media/sqlgram/IfExists.png) + +**DBName:** + +![DBName](/media/sqlgram/DBName.png) + +## 示例 + +```sql +mysql> SHOW DATABASES; ++--------------------+ +| Database | ++--------------------+ +| INFORMATION_SCHEMA | +| PERFORMANCE_SCHEMA | +| mysql | +| test | ++--------------------+ +4 rows in set (0.00 sec) + +mysql> DROP DATABASE test; +Query OK, 0 rows affected (0.25 sec) + +mysql> SHOW DATABASES; ++--------------------+ +| Database | ++--------------------+ +| INFORMATION_SCHEMA | +| PERFORMANCE_SCHEMA | +| mysql | ++--------------------+ +3 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`DROP DATABASE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [CREATE DATABASE](/dev/reference/sql/statements/create-database.md) +* [ALTER DATABASE](/dev/reference/sql/statements/alter-database.md) +* [SHOW CREATE DATABASE](/dev/reference/sql/statements/show-create-database.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/drop-index.md b/dev/reference/sql/statements/drop-index.md new file mode 100644 index 000000000000..6f3f5a661018 --- /dev/null +++ b/dev/reference/sql/statements/drop-index.md @@ -0,0 +1,74 @@ +--- +title: DROP INDEX +summary: TiDB 数据库中 DROP INDEX 的使用概况。 +category: reference +--- + +# DROP INDEX + +`DROP INDEX` 语句用于从指定的表中删除索引,并在 TiKV 中将空间标记为释放。 + +## 语法图 + +**AlterTableStmt:** + +![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) + +**AlterTableSpec:** + +![AlterTableSpec](/media/sqlgram/AlterTableSpec.png) + +**KeyOrIndex:** + +![KeyOrIndex](/media/sqlgram/KeyOrIndex.png) + +**Identifier:** + +![Identifier](/media/sqlgram/Identifier.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY auto_increment, c1 INT NOT NULL); +Query OK, 0 rows affected (0.10 sec) + +mysql> INSERT INTO t1 (c1) VALUES (1),(2),(3),(4),(5); +Query OK, 5 rows affected (0.02 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +mysql> EXPLAIN SELECT * FROM t1 WHERE c1 = 3; ++---------------------+----------+------+-------------------------------------------------------------+ +| id | count | task | operator info | ++---------------------+----------+------+-------------------------------------------------------------+ +| TableReader_7 | 10.00 | root | data:Selection_6 | +| └─Selection_6 | 10.00 | cop | eq(test.t1.c1, 3) | +| └─TableScan_5 | 10000.00 | cop | table:t1, range:[-inf,+inf], keep order:false, stats:pseudo | ++---------------------+----------+------+-------------------------------------------------------------+ +3 rows in set (0.00 sec) + +mysql> CREATE INDEX c1 ON t1 (c1); +Query OK, 0 rows affected (0.30 sec) + +mysql> EXPLAIN SELECT * FROM t1 WHERE c1 = 3; ++-------------------+-------+------+-----------------------------------------------------------------+ +| id | count | task | operator info | ++-------------------+-------+------+-----------------------------------------------------------------+ +| IndexReader_6 | 10.00 | root | index:IndexScan_5 | +| └─IndexScan_5 | 10.00 | cop | table:t1, index:c1, range:[3,3], keep order:false, stats:pseudo | ++-------------------+-------+------+-----------------------------------------------------------------+ +2 rows in set (0.00 sec) + +mysql> ALTER TABLE t1 DROP INDEX c1; +Query OK, 0 rows affected (0.30 sec) +``` + +## MySQL 兼容性 + +* 不支持删除 `PRIMARY KEY`。 + +## 另请参阅 + +* [SHOW INDEX](/dev/reference/sql/statements/show-index.md) +* [CREATE INDEX](/dev/reference/sql/statements/create-index.md) +* [ADD INDEX](/dev/reference/sql/statements/add-index.md) +* [RENAME INDEX](/dev/reference/sql/statements/rename-index.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/drop-table.md b/dev/reference/sql/statements/drop-table.md new file mode 100644 index 000000000000..9ef9a3ceaa74 --- /dev/null +++ b/dev/reference/sql/statements/drop-table.md @@ -0,0 +1,57 @@ +--- +title: DROP TABLE +summary: TiDB 数据库中 DROP TABLE 的使用概况。 +category: reference +--- + +# DROP TABLE + +`DROP TABLE` 语句用于从当前所选的数据库中删除表。如果表不存在则会报错,除非使用 `IF EXISTS` 修饰符。 + +按照设计,`DROP TABLE` 也会删除视图,因为视图与表共享相同的命名空间。 + +## 语法图 + +**DropTableStmt:** + +![DropTableStmt](/media/sqlgram/DropTableStmt.png) + +**TableOrTables:** + +![TableOrTables](/media/sqlgram/TableOrTables.png) + +**TableNameList:** + +![TableNameList](/media/sqlgram/TableNameList.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a INT); +Query OK, 0 rows affected (0.11 sec) + +mysql> DROP TABLE t1; +Query OK, 0 rows affected (0.22 sec) + +mysql> DROP TABLE table_not_exists; +ERROR 1051 (42S02): Unknown table 'test.table_not_exists' +mysql> DROP TABLE IF EXISTS table_not_exists; +Query OK, 0 rows affected (0.01 sec) + +mysql> CREATE VIEW v1 AS SELECT 1; +Query OK, 0 rows affected (0.10 sec) + +mysql> DROP TABLE v1; +Query OK, 0 rows affected (0.23 sec) +``` + +## MySQL 兼容性 + +* 在尝试删除不存在的表时,使用 `IF EXISTS` 删除表不会返回警告。[Issue #7867](https://github.com/pingcap/tidb/issues/7867) + +## 另请参阅 + +* [DROP VIEW](/dev/reference/sql/statements/drop-view.md) +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) +* [SHOW TABLES](/dev/reference/sql/statements/show-tables.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/drop-user.md b/dev/reference/sql/statements/drop-user.md new file mode 100644 index 000000000000..d90a8649ba58 --- /dev/null +++ b/dev/reference/sql/statements/drop-user.md @@ -0,0 +1,73 @@ +--- +title: DROP USER +summary: TiDB 数据库中 DROP USER 的使用概况。 +category: reference +--- + +# DROP USER + +`DROP USER` 语句用于从 TiDB 系统数据库中删除用户。如果用户不存在,使用关键词 `IF EXISTS` 可避免出现警告。 + +## 语法图 + +**DropUserStmt:** + +![DropUserStmt](/media/sqlgram/DropUserStmt.png) + +**Username:** + +![Username](/media/sqlgram/Username.png) + + +## 示例 + +```sql +mysql> DROP USER idontexist; +ERROR 1396 (HY000): Operation DROP USER failed for idontexist@% + +mysql> DROP USER IF EXISTS idontexist; +Query OK, 0 rows affected (0.01 sec) + +mysql> CREATE USER newuser IDENTIFIED BY 'mypassword'; +Query OK, 1 row affected (0.02 sec) + +mysql> GRANT ALL ON test.* TO 'newuser'; +Query OK, 0 rows affected (0.03 sec) + +mysql> SHOW GRANTS FOR 'newuser'; ++-------------------------------------------------+ +| Grants for newuser@% | ++-------------------------------------------------+ +| GRANT USAGE ON *.* TO 'newuser'@'%' | +| GRANT ALL PRIVILEGES ON test.* TO 'newuser'@'%' | ++-------------------------------------------------+ +2 rows in set (0.00 sec) + +mysql> REVOKE ALL ON test.* FROM 'newuser'; +Query OK, 0 rows affected (0.03 sec) + +mysql> SHOW GRANTS FOR 'newuser'; ++-------------------------------------+ +| Grants for newuser@% | ++-------------------------------------+ +| GRANT USAGE ON *.* TO 'newuser'@'%' | ++-------------------------------------+ +1 row in set (0.00 sec) + +mysql> DROP USER newuser; +Query OK, 0 rows affected (0.14 sec) + +mysql> SHOW GRANTS FOR newuser; +ERROR 1141 (42000): There is no such grant defined for user 'newuser' on host '%' +``` + +## MySQL 兼容性 + +* 在 TiDB 中删除不存在的用户时,使用 `IF EXISTS` 可避免出现警告。[Issue #10196](https://github.com/pingcap/tidb/issues/10196)。 + +## 另请参阅 + +* [CREATE USER](/dev/reference/sql/statements/create-user.md) +* [ALTER USER](/dev/reference/sql/statements/alter-user.md) +* [SHOW CREATE USER](/dev/reference/sql/statements/show-create-user.md) +* [Privilege Management](/dev/reference/security/privilege-system.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/drop-view.md b/dev/reference/sql/statements/drop-view.md new file mode 100644 index 000000000000..96e90150705b --- /dev/null +++ b/dev/reference/sql/statements/drop-view.md @@ -0,0 +1,83 @@ +--- +title: DROP VIEW +summary: TiDB 数据库中 DROP VIEW 的使用概况。 +category: reference +--- + +# DROP VIEW + +`DROP VIEW` 语句用于从当前所选定的数据库中删除视图对象。视图所引用的基表不受影响。 + +## 语法图 + +**DropViewStmt:** + +![DropViewStmt](/media/sqlgram/DropViewStmt.png) + +**TableNameList:** + +![TableNameList](/media/sqlgram/TableNameList.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +## 示例 + +```sql +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> DROP VIEW v1; +Query OK, 0 rows affected (0.23 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 兼容性 + +`DROP VIEW` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## See also + +* [DROP TABLE](/dev/reference/sql/statements/drop-table.md) +* [CREATE VIEW](/dev/reference/sql/statements/create-view.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/execute.md b/dev/reference/sql/statements/execute.md new file mode 100644 index 000000000000..e0d1ccdec5e7 --- /dev/null +++ b/dev/reference/sql/statements/execute.md @@ -0,0 +1,49 @@ +--- +title: EXECUTE +summary: TiDB 数据库中 EXECUTE 的使用概况。 +category: reference +--- + +# EXECUTE + +`EXECUTE` 语句为服务器端预处理语句提供 SQL 接口。 + +## 语法图 + +**ExecuteStmt:** + +![ExecuteStmt](/media/sqlgram/ExecuteStmt.png) + +**Identifier:** + +![Identifier](/media/sqlgram/Identifier.png) + +## 示例 + +```sql +mysql> PREPARE mystmt FROM 'SELECT ? as num FROM DUAL'; +Query OK, 0 rows affected (0.00 sec) + +mysql> SET @number = 5; +Query OK, 0 rows affected (0.00 sec) + +mysql> EXECUTE mystmt USING @number; ++------+ +| num | ++------+ +| 5 | ++------+ +1 row in set (0.00 sec) + +mysql> DEALLOCATE PREPARE mystmt; +Query OK, 0 rows affected (0.00 sec) +``` + +## MySQL 兼容性 + +`EXECUTE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [PREPARE](/dev/reference/sql/statements/prepare.md) +* [DEALLOCATE](/dev/reference/sql/statements/deallocate.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/explain-analyze.md b/dev/reference/sql/statements/explain-analyze.md new file mode 100644 index 000000000000..617695038b5c --- /dev/null +++ b/dev/reference/sql/statements/explain-analyze.md @@ -0,0 +1,62 @@ +--- +title: EXPLAIN ANALYZE +summary: TiDB 数据库中 EXPLAIN ANALYZE 的使用概况。 +category: reference +--- + +# EXPLAIN ANALYZE + +`EXPLAIN ANALYZE` 语句的工作方式类似于 `EXPLAIN`,主要区别在于前者实际上会执行语句。这样可以将查询计划中的估计值与执行时所遇到的实际值进行比较。如果估计值与实际值显著不同,那么应考虑在受影响的表上运行 `ANALYZE TABLE`。 + +## 语法图 + +**ExplainSym:** + +![ExplainSym](/media/sqlgram/ExplainSym.png) + +**ExplainStmt:** + +![ExplainStmt](/media/sqlgram/ExplainStmt.png) + +**ExplainableStmt:** + +![ExplainableStmt](/media/sqlgram/ExplainableStmt.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY auto_increment, c1 INT NOT NULL); +Query OK, 0 rows affected (0.12 sec) + +mysql> INSERT INTO t1 (c1) VALUES (1), (2), (3); +Query OK, 3 rows affected (0.02 sec) +Records: 3 Duplicates: 0 Warnings: 0 + +mysql> EXPLAIN ANALYZE SELECT * FROM t1 WHERE id = 1; ++-------------+-------+------+--------------------+---------------------------+ +| id | count | task | operator info | execution info | ++-------------+-------+------+--------------------+---------------------------+ +| Point_Get_1 | 1.00 | root | table:t1, handle:1 | time:0ns, loops:0, rows:0 | ++-------------+-------+------+--------------------+---------------------------+ +1 row in set (0.01 sec) + +mysql> EXPLAIN ANALYZE SELECT * FROM t1; ++-------------------+----------+------+-------------------------------------------------------------+----------------------------------+ +| id | count | task | operator info | execution info | ++-------------------+----------+------+-------------------------------------------------------------+----------------------------------+ +| TableReader_5 | 10000.00 | root | data:TableScan_4 | time:931.759µs, loops:2, rows:3 | +| └─TableScan_4 | 10000.00 | cop | table:t1, range:[-inf,+inf], keep order:false, stats:pseudo | time:0s, loops:0, rows:3 | ++-------------------+----------+------+-------------------------------------------------------------+----------------------------------+ +2 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +该语句是 TiDB 对 MySQL 语法的扩展。 + +## 另请参阅 + +* [Understanding the Query Execution Plan](/dev/reference/performance/understanding-the-query-execution-plan.md) +* [EXPLAIN](/dev/reference/sql/statements/explain.md) +* [ANALYZE TABLE](/dev/reference/sql/statements/analyze-table.md) +* [TRACE](/dev/reference/sql/statements/trace.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/explain.md b/dev/reference/sql/statements/explain.md new file mode 100644 index 000000000000..b5f7710acadb --- /dev/null +++ b/dev/reference/sql/statements/explain.md @@ -0,0 +1,159 @@ +--- +title: EXPLAIN +summary: TiDB 数据库中 EXPLAIN 的使用概况。 +category: reference +aliases: ['/docs-cn/sql/util/'] +--- + +# EXPLAIN + +`EXPLAIN` 语句仅用于显示查询的执行计划,而不执行查询。`EXPLAIN ANALYZE` 可执行查询,补充 `EXPLAIN` 语句。如果 `EXPLAIN` 的输出与预期结果不匹配,可考虑在查询的每个表上执行 `ANALYZE TABLE`。 + +语句 `DESC` 和 `DESCRIBE` 是 `EXPLAIN` 的别名。`EXPLAIN ` 的替代用法记录在 [`SHOW [FULL] COLUMNS FROM`](/dev/reference/sql/statements/show-columns-from.md) 下。 + +## 语法图 + +**ExplainSym:** + +![ExplainSym](/media/sqlgram/ExplainSym.png) + +**ExplainStmt:** + +![ExplainStmt](/media/sqlgram/ExplainStmt.png) + +**ExplainableStmt:** + +![ExplainableStmt](/media/sqlgram/ExplainableStmt.png) + +## 示例 + +```sql +mysql> EXPLAIN SELECT 1; ++-------------------+-------+------+---------------+ +| id | count | task | operator info | ++-------------------+-------+------+---------------+ +| Projection_3 | 1.00 | root | 1 | +| └─TableDual_4 | 1.00 | root | rows:1 | ++-------------------+-------+------+---------------+ +2 rows in set (0.00 sec) + +mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY auto_increment, c1 INT NOT NULL); +Query OK, 0 rows affected (0.10 sec) + +mysql> INSERT INTO t1 (c1) VALUES (1), (2), (3); +Query OK, 3 rows affected (0.02 sec) +Records: 3 Duplicates: 0 Warnings: 0 + +mysql> EXPLAIN SELECT * FROM t1 WHERE id = 1; ++-------------+-------+------+--------------------+ +| id | count | task | operator info | ++-------------+-------+------+--------------------+ +| Point_Get_1 | 1.00 | root | table:t1, handle:1 | ++-------------+-------+------+--------------------+ +1 row in set (0.00 sec) + +mysql> DESC SELECT * FROM t1 WHERE id = 1; ++-------------+-------+------+--------------------+ +| id | count | task | operator info | ++-------------+-------+------+--------------------+ +| Point_Get_1 | 1.00 | root | table:t1, handle:1 | ++-------------+-------+------+--------------------+ +1 row in set (0.00 sec) + +mysql> DESCRIBE SELECT * FROM t1 WHERE id = 1; ++-------------+-------+------+--------------------+ +| id | count | task | operator info | ++-------------+-------+------+--------------------+ +| Point_Get_1 | 1.00 | root | table:t1, handle:1 | ++-------------+-------+------+--------------------+ +1 row in set (0.00 sec) + +mysql> EXPLAIN INSERT INTO t1 (c1) VALUES (4); +ERROR 1105 (HY000): Unsupported type *core.Insert + +mysql> EXPLAIN UPDATE t1 SET c1=5 WHERE c1=3; ++---------------------+----------+------+-------------------------------------------------------------+ +| id | count | task | operator info | ++---------------------+----------+------+-------------------------------------------------------------+ +| TableReader_6 | 10.00 | root | data:Selection_5 | +| └─Selection_5 | 10.00 | cop | eq(test.t1.c1, 3) | +| └─TableScan_4 | 10000.00 | cop | table:t1, range:[-inf,+inf], keep order:false, stats:pseudo | ++---------------------+----------+------+-------------------------------------------------------------+ +3 rows in set (0.00 sec) + +mysql> EXPLAIN DELETE FROM t1 WHERE c1=3; ++---------------------+----------+------+-------------------------------------------------------------+ +| id | count | task | operator info | ++---------------------+----------+------+-------------------------------------------------------------+ +| TableReader_6 | 10.00 | root | data:Selection_5 | +| └─Selection_5 | 10.00 | cop | eq(test.t1.c1, 3) | +| └─TableScan_4 | 10000.00 | cop | table:t1, range:[-inf,+inf], keep order:false, stats:pseudo | ++---------------------+----------+------+-------------------------------------------------------------+ +3 rows in set (0.00 sec) +``` + +如果未指定 `FORMAT`,或未指定 `FORMAT ="row"`,那么 `EXPLAIN` 语句将以表格格式输出结果。更多信息,可参阅 [Understand the Query Execution Plan](https://pingcap.com/docs/dev/reference/performance/understanding-the-query-execution-plan/)。 + +除 MySQL 标准结果格式外,TiDB 还支持 DotGraph。需按照下列所示指定 `FORMAT ="dot"`: + +```sql +create table t(a bigint, b bigint); +desc format = "dot" select A.a, B.b from t A join t B on A.a > B.b where A.a < 10; + +TiDB > desc format = "dot" select A.a, B.b from t A join t B on A.a > B.b where A.a < 10;desc format = "dot" select A.a, B.b from t A join t B on A.a > B.b where A.a < 10; ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| dot contents | ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| +digraph HashRightJoin_7 { +subgraph cluster7{ +node [style=filled, color=lightgrey] +color=black +label = "root" +"HashRightJoin_7" -> "TableReader_10" +"HashRightJoin_7" -> "TableReader_12" +} +subgraph cluster9{ +node [style=filled, color=lightgrey] +color=black +label = "cop" +"Selection_9" -> "TableScan_8" +} +subgraph cluster11{ +node [style=filled, color=lightgrey] +color=black +label = "cop" +"TableScan_11" +} +"TableReader_10" -> "Selection_9" +"TableReader_12" -> "TableScan_11" +} + | ++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +如果你的计算机上安装了 `dot` 程序(在 `graphviz` 包中),可使用以下方法生成 PNG 文件: + +```bash +dot xx.dot -T png -O + +The xx.dot is the result returned by the above statement. +``` + +如果你的计算机上未安装 `dot` 程序,可将结果复制到 [本网站](http://www.webgraphviz.com/) 以获取树形图: + +![Explain Dot](/media/explain_dot.png) + +## MySQL 兼容性 + +* `EXPLAIN` 的格式和 TiDB 中潜在的执行计划都与 MySQL 有很大不同。 +* TiDB 不像 MySQL 那样支持 `EXPLAIN FORMAT = JSON`。 +* TiDB 目前不支持插入语句的 `EXPLAIN`。 + +## 另请参阅 + +* [Understanding the Query Execution Plan](/dev/reference/performance/understanding-the-query-execution-plan.md) +* [EXPLAIN ANALYZE](/dev/reference/sql/statements/explain-analyze.md) +* [ANALYZE TABLE](/dev/reference/sql/statements/analyze-table.md) +* [TRACE](/dev/reference/sql/statements/trace.md) diff --git a/dev/reference/sql/statements/flush-privileges.md b/dev/reference/sql/statements/flush-privileges.md new file mode 100644 index 000000000000..29d2e13e262a --- /dev/null +++ b/dev/reference/sql/statements/flush-privileges.md @@ -0,0 +1,40 @@ +--- +title: FLUSH PRIVILEGES +summary: TiDB 数据库中 FLUSH PRIVILEGES 的使用概况。 +category: reference +--- + +# FLUSH PRIVILEGES + +`FLUSH PRIVILEGES` 语句可触发 TiDB 从权限表中重新加载权限的内存副本。在对如 `mysql.user` 一类的表进行手动编辑后,应当执行 `FLUSH PRIVILEGES`。使用如 `GRANT` 或 `REVOKE` 一类的权限语句后,不需要执行 `FLUSH PRIVILEGES` 语句。 + +## 语法图 + +**FlushStmt:** + +![FlushStmt](/media/sqlgram/FlushStmt.png) + +**NoWriteToBinLogAliasOpt:** + +![NoWriteToBinLogAliasOpt](/media/sqlgram/NoWriteToBinLogAliasOpt.png) + +**FlushOption:** + +![FlushOption](/media/sqlgram/FlushOption.png) + +## 示例 + +```sql +mysql> FLUSH PRIVILEGES; +Query OK, 0 rows affected (0.01 sec) +``` + +## MySQL 兼容性 + +`FLUSH PRIVILEGES` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [GRANT](/dev/reference/sql/statements/grant.md) +* [REVOKE](/dev/reference/sql/statements/revoke.md) +* [Privilege Management](/dev/reference/security/privilege-system.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/flush-status.md b/dev/reference/sql/statements/flush-status.md new file mode 100644 index 000000000000..dd1d8f99498e --- /dev/null +++ b/dev/reference/sql/statements/flush-status.md @@ -0,0 +1,77 @@ +--- +title: FLUSH STATUS +summary: TiDB 数据库中 FLUSH STATUS 的使用概况。 +category: reference +--- + +# FLUSH STATUS + +`FLUSH STATUS` 语句用于提供 MySQL 兼容性,但在 TiDB 上并无作用。因为 TiDB 使用 Prometheus 和 Grafana 而非 `SHOW STATUS` 来进行集中度量收集。 + +## 语法图 + +**FlushStmt:** + +![FlushStmt](/media/sqlgram/FlushStmt.png) + +**NoWriteToBinLogAliasOpt:** + +![NoWriteToBinLogAliasOpt](/media/sqlgram/NoWriteToBinLogAliasOpt.png) + +**FlushOption:** + +![FlushOption](/media/sqlgram/FlushOption.png) + +## 示例 + +```sql +mysql> show status; ++--------------------+--------------------------------------+ +| Variable_name | Value | ++--------------------+--------------------------------------+ +| Ssl_cipher_list | | +| server_id | 93e2e07d-6bb4-4a1b-90b7-e035fae154fe | +| ddl_schema_version | 141 | +| Ssl_verify_mode | 0 | +| Ssl_version | | +| Ssl_cipher | | ++--------------------+--------------------------------------+ +6 rows in set (0.01 sec) + +mysql> show global status; ++--------------------+--------------------------------------+ +| Variable_name | Value | ++--------------------+--------------------------------------+ +| Ssl_cipher | | +| Ssl_cipher_list | | +| Ssl_verify_mode | 0 | +| Ssl_version | | +| server_id | 93e2e07d-6bb4-4a1b-90b7-e035fae154fe | +| ddl_schema_version | 141 | ++--------------------+--------------------------------------+ +6 rows in set (0.00 sec) + +mysql> flush status; +Query OK, 0 rows affected (0.00 sec) + +mysql> show status; ++--------------------+--------------------------------------+ +| Variable_name | Value | ++--------------------+--------------------------------------+ +| Ssl_cipher | | +| Ssl_cipher_list | | +| Ssl_verify_mode | 0 | +| Ssl_version | | +| ddl_schema_version | 141 | +| server_id | 93e2e07d-6bb4-4a1b-90b7-e035fae154fe | ++--------------------+--------------------------------------+ +6 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +* `FLUSH STATUS` 语句仅用于提供 MySQL 兼容性。 + +## 另请参阅 + +* [SHOW \[GLOBAL|SESSION\] STATUS](/dev/reference/sql/statements/show-status.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/flush-tables.md b/dev/reference/sql/statements/flush-tables.md new file mode 100644 index 000000000000..ddb4d937b867 --- /dev/null +++ b/dev/reference/sql/statements/flush-tables.md @@ -0,0 +1,55 @@ +--- +title: FLUSH TABLES +summary: TiDB 数据库中 FLUSH TABLES 的使用概况。 +category: reference +--- + +# FLUSH TABLES + +`FLUSH TABLES` 语句用于提供 MySQL 兼容性,但在 TiDB 中并无有效用途。 + +## 语法图 + +**FlushStmt:** + +![FlushStmt](/media/sqlgram/FlushStmt.png) + +**NoWriteToBinLogAliasOpt:** + +![NoWriteToBinLogAliasOpt](/media/sqlgram/NoWriteToBinLogAliasOpt.png) + +**FlushOption:** + +![FlushOption](/media/sqlgram/FlushOption.png) + +**TableOrTables:** + +![TableOrTables](/media/sqlgram/TableOrTables.png) + +**TableNameListOpt:** + +![TableNameListOpt](/media/sqlgram/TableNameListOpt.png) + +**WithReadLockOpt:** + +![WithReadLockOpt](/media/sqlgram/WithReadLockOpt.png) + +## 示例 + +```sql +mysql> FLUSH TABLES; +Query OK, 0 rows affected (0.00 sec) + +mysql> FLUSH TABLES WITH READ LOCK; +ERROR 1105 (HY000): FLUSH TABLES WITH READ LOCK is not supported. Please use @@tidb_snapshot +``` + +## MySQL 兼容性 + +* TiDB 没有 MySQL 中的表缓存这一概念。所以,`FLUSH TABLES` 因 MySQL 兼容性会在 TiDB 中解析出但会被忽略掉。 +* 因为 TiDB 目前不支持锁表,所以`FLUSH TABLES WITH READ LOCK` 语句会产生错误。建议使用 [Historical reads] 来实现锁表。 + +## 另请参阅 + +* [LOCK TABLES](/dev/reference/sql/statements/lock-tables.md) +* [Read historical data](/dev/how-to/get-started/read-historical-data.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/grant-privileges.md b/dev/reference/sql/statements/grant-privileges.md new file mode 100644 index 000000000000..187afe1ddd34 --- /dev/null +++ b/dev/reference/sql/statements/grant-privileges.md @@ -0,0 +1,70 @@ +--- +title: GRANT +summary: TiDB 数据库中 GRANT 的使用概况。 +category: reference +--- + +# GRANT + +`GRANT ` 语句用于为 TiDB 中已存在的用户分配权限。TiDB 中的权限系统同 MySQL 一样,都基于数据库/表模式来分配凭据。 + +## 语法图 + +**GrantStmt:** + +![GrantStmt](/media/sqlgram/GrantStmt.png) + +**PrivElemList:** + +![PrivElemList](/media/sqlgram/PrivElemList.png) + +**PrivElem:** + +![PrivElem](/media/sqlgram/PrivElem.png) + +**PrivType:** + +![PrivType](/media/sqlgram/PrivType.png) + +**ObjectType:** + +![ObjectType](/media/sqlgram/ObjectType.png) + +**PrivLevel:** + +![PrivLevel](/media/sqlgram/PrivLevel.png) + +**UserSpecList:** + +![UserSpecList](/media/sqlgram/UserSpecList.png) + +## 示例 + +```sql +mysql> CREATE USER newuser IDENTIFIED BY 'mypassword'; +Query OK, 1 row affected (0.02 sec) + +mysql> GRANT ALL ON test.* TO 'newuser'; +Query OK, 0 rows affected (0.03 sec) + +mysql> SHOW GRANTS FOR 'newuser'; ++-------------------------------------------------+ +| Grants for newuser@% | ++-------------------------------------------------+ +| GRANT USAGE ON *.* TO 'newuser'@'%' | +| GRANT ALL PRIVILEGES ON test.* TO 'newuser'@'%' | ++-------------------------------------------------+ +2 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +* 与 MySQL 类似,`USAGE` 权限表示登录 TiDB 服务器的能力。 +* 目前不支持列级权限。 +* 与 MySQL 类似,不存在 `NO_AUTO_CREATE_USER` sql 模式时,`GRANT` 语句将在用户不存在时自动创建一个空密码的新用户。删除此 sql-mode(默认情况下已启用)会带来安全风险。 + +## 另请参阅 + +* [REVOKE ](/dev/reference/sql/statements/revoke-privileges.md) +* [SHOW GRANTS](/dev/reference/sql/statements/show-grants.md) +* [Privilege Management](/dev/reference/security/privilege-system.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/insert.md b/dev/reference/sql/statements/insert.md new file mode 100644 index 000000000000..89387a3a25b6 --- /dev/null +++ b/dev/reference/sql/statements/insert.md @@ -0,0 +1,100 @@ +--- +title: INSERT +summary: TiDB 数据库中 INSERT 的使用概况。 +category: reference +--- + +# INSERT + +使用 `INSERT` 语句在表中插入新行。 + +## 语法图 + +**InsertIntoStmt:** + +![InsertIntoStmt](/media/sqlgram/InsertIntoStmt.png) + +**PriorityOpt:** + +![PriorityOpt](/media/sqlgram/PriorityOpt.png) + +**IgnoreOptional:** + +![IgnoreOptional](/media/sqlgram/IgnoreOptional.png) + +**IntoOpt:** + +![IntoOpt](/media/sqlgram/IntoOpt.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +**InsertValues:** + +![InsertValues](/media/sqlgram/InsertValues.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a int); +Query OK, 0 rows affected (0.11 sec) + +mysql> CREATE TABLE t2 LIKE t1; +Query OK, 0 rows affected (0.11 sec) + +mysql> INSERT INTO t1 VALUES (1); +Query OK, 1 row affected (0.02 sec) + +mysql> INSERT INTO t1 (a) VALUES (1); +Query OK, 1 row affected (0.01 sec) + +mysql> INSERT INTO t2 SELECT * FROM t1; +Query OK, 2 rows affected (0.01 sec) +Records: 2 Duplicates: 0 Warnings: 0 + +mysql> SELECT * FROM t1; ++------+ +| a | ++------+ +| 1 | +| 1 | ++------+ +2 rows in set (0.00 sec) + +mysql> SELECT * FROM t2; ++------+ +| a | ++------+ +| 1 | +| 1 | ++------+ +2 rows in set (0.00 sec) + +mysql> INSERT INTO t2 VALUES (2),(3),(4); +Query OK, 3 rows affected (0.02 sec) +Records: 3 Duplicates: 0 Warnings: 0 + +mysql> SELECT * FROM t2; ++------+ +| a | ++------+ +| 1 | +| 1 | +| 2 | +| 3 | +| 4 | ++------+ +5 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`INSERT` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [DELETE](/dev/reference/sql/statements/delete.md) +* [SELECT](/dev/reference/sql/statements/select.md) +* [UPDATE](/dev/reference/sql/statements/update.md) +* [REPLACE](/dev/reference/sql/statements/replace.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/kill.md b/dev/reference/sql/statements/kill.md new file mode 100644 index 000000000000..a87cdf86d305 --- /dev/null +++ b/dev/reference/sql/statements/kill.md @@ -0,0 +1,41 @@ +--- +title: KILL [TIDB] +summary: TiDB 数据库中 KILL [TIDB] 的使用概况。 +category: reference +--- + +# KILL [TIDB] + +`KILL TIDB` 语句用于终止 TiDB 中的连接。 + +按照设计,`KILL TIDB` 语句默认与 MySQL 不兼容。负载均衡器后面通常放有多个 TiDB 服务器,这种默认不兼容有助于防止在错误的 TiDB 服务器上终止连接。 + +## 语法图 + +**KillStmt:** + +![KillStmt](/media/sqlgram/KillStmt.png) + +## 示例 + +```sql +mysql> SHOW PROCESSLIST; ++------+------+-----------+------+---------+------+-------+------------------+ +| Id | User | Host | db | Command | Time | State | Info | ++------+------+-----------+------+---------+------+-------+------------------+ +| 1 | root | 127.0.0.1 | test | Query | 0 | 2 | SHOW PROCESSLIST | +| 2 | root | 127.0.0.1 | | Sleep | 4 | 2 | | ++------+------+-----------+------+---------+------+-------+------------------+ +2 rows in set (0.00 sec) + +mysql> KILL TIDB 2; +Query OK, 0 rows affected (0.00 sec) +``` + +## MySQL 兼容性 + +* `KILL TIDB` 语句是 TiDB 的扩展语法。如果正尝试终止的会话位于同一个 TiDB 服务器上,可在配置文件里设置 [`compatible-kill-query = true`](/dev/reference/configuration/tidb-server/configuration-file.md#compatible-kill-query)。 + +## 另请参阅 + +* [SHOW \[FULL\] PROCESSLIST](/dev/reference/sql/statements/show-processlist.md) diff --git a/dev/reference/sql/statements/load-data.md b/dev/reference/sql/statements/load-data.md new file mode 100644 index 000000000000..d270e515c8e5 --- /dev/null +++ b/dev/reference/sql/statements/load-data.md @@ -0,0 +1,48 @@ +--- +title: LOAD DATA +summary: TiDB 数据库中 LOAD DATA 的使用概况。 +category: reference +--- + +# LOAD DATA + +`LOAD DATA` 语句用于将数据批量加载到 TiDB 表中。 + +## 语法图 + +**LoadDataStmt:** + +![LoadDataStmt](/media/sqlgram/LoadDataStmt.png) + +## 示例 + +```sql +mysql> CREATE TABLE trips ( + -> trip_id bigint NOT NULL PRIMARY KEY auto_increment, + -> duration integer not null, + -> start_date datetime, + -> end_date datetime, + -> start_station_number integer, + -> start_station varchar(255), + -> end_station_number integer, + -> end_station varchar(255), + -> bike_number varchar(255), + -> member_type varchar(255) + -> ); +Query OK, 0 rows affected (0.14 sec) + +mysql> LOAD DATA LOCAL INFILE '/mnt/evo970/data-sets/bikeshare-data/2017Q4-capitalbikeshare-tripdata.csv' INTO TABLE trips FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (duration, start_date, end_date, start_station_number, start_station, end_station_number, end_station, bike_number, member_type); + +Query OK, 815264 rows affected (39.63 sec) +Records: 815264 Deleted: 0 Skipped: 0 Warnings: 0 +``` + +## MySQL 兼容性 + +* 默认情况下,TiDB 每 20,000 行会进行一次提交。这类似于 MySQL NDB Cluster,但并非 InnoDB 存储引擎的默认配置。 + +## 另请参阅 + +* [INSERT](/dev/reference/sql/statements/insert.md) +* [Transaction Model](/dev/reference/transactions/transaction-model.md) +* [Import Example Database](/dev/how-to/get-started/import-example-database.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/modify-column.md b/dev/reference/sql/statements/modify-column.md new file mode 100644 index 000000000000..ae2b41ec73e6 --- /dev/null +++ b/dev/reference/sql/statements/modify-column.md @@ -0,0 +1,75 @@ +--- +title: MODIFY COLUMN +summary: TiDB 数据库中 MODIFY COLUMN 的使用概况。 +category: reference +--- + +# MODIFY COLUMN + +`ALTER TABLE .. MODIFY COLUMN` 语句用于修改已有表上的列,包括列的数据类型和属性。若要同时重命名,可改用 [`CHANGE COLUMN`](/dev/reference/sql/statements/change-column.md) 语句。 + +## 语法图 + +**AlterTableStmt:** + +![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) + +**AlterTableSpec:** + +![AlterTableSpec](/media/sqlgram/AlterTableSpec.png) + +**ColumnKeywordOpt:** + +![ColumnKeywordOpt](/media/sqlgram/ColumnKeywordOpt.png) + +**ColumnDef:** + +![ColumnDef](/media/sqlgram/ColumnDef.png) + +**ColumnPosition:** + +![ColumnPosition](/media/sqlgram/ColumnPosition.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (id int not null primary key auto_increment, col1 INT); +Query OK, 0 rows affected (0.11 sec) + +mysql> INSERT INTO t1 (col1) VALUES (1),(2),(3),(4),(5); +Query OK, 5 rows affected (0.02 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +mysql> ALTER TABLE t1 MODIFY col1 BIGINT; +Query OK, 0 rows affected (0.09 sec) + +mysql> SHOW CREATE TABLE t1\G +*************************** 1. row *************************** + Table: t1 +Create Table: CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `col1` bigint(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=30001 +1 row in set (0.00 sec) + +mysql> ALTER TABLE t1 MODIFY col1 INT; +ERROR 1105 (HY000): unsupported modify column length 11 is less than origin 20 +mysql> ALTER TABLE t1 MODIFY col1 BLOB; +ERROR 1105 (HY000): unsupported modify column type 252 not match origin 8 +mysql> ALTER TABLE t1 MODIFY col1 BIGINT, MODIFY id BIGINT NOT NULL; +ERROR 1105 (HY000): can't run multi schema change +``` + +## MySQL 兼容性 + +* 目前不支持使用单个 `ALTER TABLE` 语句进行多个修改。 +* 仅支持特定类型的数据类型更改。例如,支持将 `INTEGER` 改为 `BIGINT`,但不支持将 `BIGINT` 改为 `INTEGER`。不支持将整数改为字符串格式或 BLOB 格式。 + +## 另请参阅 + +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) +* [ADD COLUMN](/dev/reference/sql/statements/add-column.md) +* [DROP COLUMN](/dev/reference/sql/statements/drop-column.md) +* [CHANGE COLUMN](/dev/reference/sql/statements/change-column.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/prepare.md b/dev/reference/sql/statements/prepare.md index 3057d546ea75..ce62808cadfe 100644 --- a/dev/reference/sql/statements/prepare.md +++ b/dev/reference/sql/statements/prepare.md @@ -1,43 +1,46 @@ --- -title: Prepared SQL 语句语法 +title: PREPARE +summary: TiDB 数据库中 PREPARE 的使用概况。 category: reference aliases: ['/docs-cn/sql/prepare/'] --- -# Prepared SQL 语句语法 +# PREPARE -TiDB 支持服务器端的 Prepared 语句,这种方式可以降低语句解析以及查询优化的开销,提高执行效率。有两种方式可以使用 Prepared 语句: +`PREPARE` 语句为服务器端预处理语句提供 SQL 接口。 -## 通过应用程序 +## 语法图 -大多数 MySQL Driver 都支持 Prepared 语句,比如 [MySQL Connector/C](https://dev.mysql.com/doc/connector-c/en/)。这种方式可以通过 Binary 协议直接调用 Prepared 语句 API。 +**PreparedStmt:** -## 通过 SQL 语句 +![PreparedStmt](/media/sqlgram/PreparedStmt.png) -通过 `PREPARE`,`EXECUTE` 以及 `DEALLOCATE PREPARE` 这三个语句也可以实现 Prepared 语句,这种方式不如第一种方式效率高,但是不需要写程序即可使用。 - -### `PREPARE` 语句 +## 示例 ```sql -PREPARE stmt_name FROM preparable_stmt +mysql> PREPARE mystmt FROM 'SELECT ? as num FROM DUAL'; +Query OK, 0 rows affected (0.00 sec) + +mysql> SET @number = 5; +Query OK, 0 rows affected (0.00 sec) + +mysql> EXECUTE mystmt USING @number; ++------+ +| num | ++------+ +| 5 | ++------+ +1 row in set (0.00 sec) + +mysql> DEALLOCATE PREPARE mystmt; +Query OK, 0 rows affected (0.00 sec) ``` -`PREPARE` 语句对 `preparable_stmt` 做预处理(语法解析、语义检查、查询优化)并将其处理结果命名为 `stmt_name`,后面的操作可以通过 `stmt_name` 来引用。处理好的语句可以通过 `EXECUTE` 语句执行或者是通过 `DEALLOCATE PREPARE` 语句释放。 - -### `EXECUTE` 语句 - -```sql -EXECUTE stmt_name [USING @var_name [, @var_name] ...] -``` +## MySQL 兼容性 -`EXECUTE` 语句执行名字为 `stmt_name` 的预处理语句。如果预处理语句中有参数,则可以通过 `USING` 子句中的 User Variable 列表给参数赋值。 - -### `DEALLOCATE PREPARE` 语句 - -```sql -{DEALLOCATE | DROP} PREPARE stmt_name -``` +`PREPARE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 -`DEALLOCATE PREPARE` 语句删除 `PREPARE` 产生的预处理语句结果。 +## 另请参阅 -更多信息请参考 [MySQL Prepared Statement Syntax](https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html)。 \ No newline at end of file +* [EXECUTE](/dev/reference/sql/statements/execute.md) +* [DEALLOCATE](/dev/reference/sql/statements/deallocate.md) diff --git a/dev/reference/sql/statements/rename-index.md b/dev/reference/sql/statements/rename-index.md new file mode 100644 index 000000000000..2219683d0064 --- /dev/null +++ b/dev/reference/sql/statements/rename-index.md @@ -0,0 +1,62 @@ +--- +title: RENAME INDEX +summary: TiDB 数据库中 RENAME INDEX 的使用概况。 +category: reference +--- + +# RENAME INDEX + +`ALTER TABLE .. RENAME INDEX` 语句用于对已有索引进行重命名。这在 TiDB 中是即时操作的,仅需更改元数据。 + +## 语法图 + +**AlterTableStmt:** + +![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) + +**KeyOrIndex:** + +![KeyOrIndex](/media/sqlgram/KeyOrIndex.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY auto_increment, c1 INT NOT NULL, INDEX col1 (c1)); +Query OK, 0 rows affected (0.11 sec) + +mysql> SHOW CREATE TABLE t1\G +*************************** 1. row *************************** + Table: t1 +Create Table: CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `c1` int(11) NOT NULL, + PRIMARY KEY (`id`), + KEY `col1` (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +1 row in set (0.00 sec) + +mysql> ALTER TABLE t1 RENAME INDEX col1 TO c1; +Query OK, 0 rows affected (0.09 sec) + +mysql> SHOW CREATE TABLE t1\G +*************************** 1. row *************************** + Table: t1 +Create Table: CREATE TABLE `t1` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `c1` int(11) NOT NULL, + PRIMARY KEY (`id`), + KEY `c1` (`c1`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +`RENAME INDEX` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) +* [CREATE INDEX](/dev/reference/sql/statements/create-index.md) +* [DROP INDEX](/dev/reference/sql/statements/drop-index.md) +* [SHOW INDEX](/dev/reference/sql/statements/show-index.md) diff --git a/dev/reference/sql/statements/rename-table.md b/dev/reference/sql/statements/rename-table.md new file mode 100644 index 000000000000..bbb192a5d2e1 --- /dev/null +++ b/dev/reference/sql/statements/rename-table.md @@ -0,0 +1,55 @@ +--- +title: RENAME TABLE +summary: TiDB 数据库中 RENAME TABLE 的使用概况。 +category: reference +--- + +# RENAME TABLE + +`RENAME TABLE` 语句用于对已有表进行重命名。 + +## 语法图 + +**RenameTableStmt:** + +![RenameTableStmt](/media/sqlgram/RenameTableStmt.png) + +**TableToTable:** + +![TableToTable](/media/sqlgram/TableToTable.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a int); +Query OK, 0 rows affected (0.12 sec) + +mysql> SHOW TABLES; ++----------------+ +| Tables_in_test | ++----------------+ +| t1 | ++----------------+ +1 row in set (0.00 sec) + +mysql> RENAME TABLE t1 TO t2; +Query OK, 0 rows affected (0.08 sec) + +mysql> SHOW TABLES; ++----------------+ +| Tables_in_test | ++----------------+ +| t2 | ++----------------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +`RENAME TABLE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [SHOW TABLES](/dev/reference/sql/statements/show-tables.md) +* [ALTER TABLE](/dev/reference/sql/statements/alter-table.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/replace.md b/dev/reference/sql/statements/replace.md new file mode 100644 index 000000000000..a6aa2199815e --- /dev/null +++ b/dev/reference/sql/statements/replace.md @@ -0,0 +1,76 @@ +--- +title: REPLACE +summary: TiDB 数据库中 REPLACE 的使用概况。 +category: reference +--- + +# REPLACE + +从语义上看,`REPLACE` 语句是 `DELETE` 语句和 `INSERT` 语句的结合,可用于简化应用程序代码。 + +## 语法图 + +**ReplaceIntoStmt:** + +![ReplaceIntoStmt](/media/sqlgram/ReplaceIntoStmt.png) + +**PriorityOpt:** + +![PriorityOpt](/media/sqlgram/PriorityOpt.png) + +**IntoOpt:** + +![IntoOpt](/media/sqlgram/IntoOpt.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +**InsertValues:** + +![InsertValues](/media/sqlgram/InsertValues.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY auto_increment, c1 INT NOT NULL); +Query OK, 0 rows affected (0.12 sec) + +mysql> INSERT INTO t1 (c1) VALUES (1), (2), (3); +Query OK, 3 rows affected (0.02 sec) +Records: 3 Duplicates: 0 Warnings: 0 + +mysql> SELECT * FROM t1; ++----+----+ +| id | c1 | ++----+----+ +| 1 | 1 | +| 2 | 2 | +| 3 | 3 | ++----+----+ +3 rows in set (0.00 sec) + +mysql> REPLACE INTO t1 (id, c1) VALUES(3, 99); +Query OK, 2 rows affected (0.01 sec) + +mysql> SELECT * FROM t1; ++----+----+ +| id | c1 | ++----+----+ +| 1 | 1 | +| 2 | 2 | +| 3 | 99 | ++----+----+ +3 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`REPLACE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [DELETE](/dev/reference/sql/statements/delete.md) +* [INSERT](/dev/reference/sql/statements/insert.md) +* [SELECT](/dev/reference/sql/statements/select.md) +* [UPDATE](/dev/reference/sql/statements/update.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/revoke-privileges.md b/dev/reference/sql/statements/revoke-privileges.md new file mode 100644 index 000000000000..396eddb9238c --- /dev/null +++ b/dev/reference/sql/statements/revoke-privileges.md @@ -0,0 +1,85 @@ +--- +title: REVOKE +summary: TiDB 数据库中 REVOKE 的使用概况。 +category: reference +--- + +# REVOKE + +`REVOKE ` 语句用于删除已有用户的权限。 + +## 语法图 + +**GrantStmt:** + +![GrantStmt](/media/sqlgram/GrantStmt.png) + +**PrivElemList:** + +![PrivElemList](/media/sqlgram/PrivElemList.png) + +**PrivElem:** + +![PrivElem](/media/sqlgram/PrivElem.png) + +**PrivType:** + +![PrivType](/media/sqlgram/PrivType.png) + +**ObjectType:** + +![ObjectType](/media/sqlgram/ObjectType.png) + +**PrivLevel:** + +![PrivLevel](/media/sqlgram/PrivLevel.png) + +**UserSpecList:** + +![UserSpecList](/media/sqlgram/UserSpecList.png) + +## 示例 + +```sql +mysql> CREATE USER newuser IDENTIFIED BY 'mypassword'; +Query OK, 1 row affected (0.02 sec) + +mysql> GRANT ALL ON test.* TO 'newuser'; +Query OK, 0 rows affected (0.03 sec) + +mysql> SHOW GRANTS FOR 'newuser'; ++-------------------------------------------------+ +| Grants for newuser@% | ++-------------------------------------------------+ +| GRANT USAGE ON *.* TO 'newuser'@'%' | +| GRANT ALL PRIVILEGES ON test.* TO 'newuser'@'%' | ++-------------------------------------------------+ +2 rows in set (0.00 sec) + +mysql> REVOKE ALL ON test.* FROM 'newuser'; +Query OK, 0 rows affected (0.03 sec) + +mysql> SHOW GRANTS FOR 'newuser'; ++-------------------------------------+ +| Grants for newuser@% | ++-------------------------------------+ +| GRANT USAGE ON *.* TO 'newuser'@'%' | ++-------------------------------------+ +1 row in set (0.00 sec) + +mysql> DROP USER newuser; +Query OK, 0 rows affected (0.14 sec) + +mysql> SHOW GRANTS FOR newuser; +ERROR 1141 (42000): There is no such grant defined for user 'newuser' on host '%' +``` + +## MySQL 兼容性 + +`REVOKE ` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [GRANT ](/dev/reference/sql/statements/grant-privileges.md) +* [SHOW GRANTS](/dev/reference/sql/statements/show-grants.md) +* [Privilege Management](/dev/reference/security/privilege-system.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/rollback.md b/dev/reference/sql/statements/rollback.md new file mode 100644 index 000000000000..26d372c41d42 --- /dev/null +++ b/dev/reference/sql/statements/rollback.md @@ -0,0 +1,44 @@ +--- +title: ROLLBACK +summary: TiDB 数据库中 ROLLBACK 的使用概况。 +category: reference +--- + +# ROLLBACK + +`ROLLBACK` 语句用于还原 TiDB 内当前事务中的所有更改,作用与 `COMMIT` 语句相反。 + +## 语法图 + +**Statement:** + +![Statement](/media/sqlgram/Statement.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a int NOT NULL PRIMARY KEY); +Query OK, 0 rows affected (0.12 sec) + +mysql> BEGIN; +Query OK, 0 rows affected (0.00 sec) + +mysql> INSERT INTO t1 VALUES (1); +Query OK, 1 row affected (0.00 sec) + +mysql> ROLLBACK; +Query OK, 0 rows affected (0.01 sec) + +mysql> SELECT * FROM t1; +Empty set (0.01 sec) +``` + +## MySQL 兼容性 + +`ROLLBACK` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [COMMIT](/dev/reference/sql/statements/commit.md) +* [BEGIN](/dev/reference/sql/statements/begin.md) +* [START TRANSACTION](/dev/reference/sql/statements/start-transaction.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/select.md b/dev/reference/sql/statements/select.md new file mode 100644 index 000000000000..970741fdf2d7 --- /dev/null +++ b/dev/reference/sql/statements/select.md @@ -0,0 +1,113 @@ +--- +title: SELECT +summary: TiDB 数据库中 SELECT 的使用概况。 +category: reference +aliases: ['/docs-cn/sql/dml/'] +--- + +# SELECT + +`SELECT` 语句用于从 TiDB 读取数据。 + +## 语法图 + +**SelectStmt:** + +![SelectStmt](/media/sqlgram/SelectStmt.png) + +**FromDual:** + +![FromDual](/media/sqlgram/FromDual.png) + +**WhereClauseOptional:** + +![WhereClauseOptional](/media/sqlgram/WhereClauseOptional.png) + +**SelectStmtOpts:** + +![SelectStmtOpts](/media/sqlgram/SelectStmtOpts.png) + +**SelectStmtFieldList:** + +![SelectStmtFieldList](/media/sqlgram/SelectStmtFieldList.png) + +**TableRefsClause:** + +![TableRefsClause](/media/sqlgram/TableRefsClause.png) + +**WhereClauseOptional:** + +![WhereClauseOptional](/media/sqlgram/WhereClauseOptional.png) + +**SelectStmtGroup:** + +![SelectStmtGroup](/media/sqlgram/SelectStmtGroup.png) + +**HavingClause:** + +![HavingClause](/media/sqlgram/HavingClause.png) + +**OrderByOptional:** + +![OrderByOptional](/media/sqlgram/OrderByOptional.png) + +**SelectStmtLimit:** + +![SelectStmtLimit](/media/sqlgram/SelectStmtLimit.png) + +**SelectLockOpt:** + +![SelectLockOpt](/media/sqlgram/SelectLockOpt.png) + +## 语法元素说明 + +|语法元素 | 说明 | +| --------------------- | -------------------------------------------------- | +|`ALL`、`DISTINCT`、`DISTINCTROW` | 查询结果集中可能会包含重复值。指定 DISTINCT/DISTINCTROW 则在查询结果中过滤掉重复的行;指定 ALL 则列出所有的行。默认为 ALL。| +|`HIGH_PRIORITY` | 该语句为高优先级语句,TiDB 在执行阶段会优先处理这条语句| +|`SQL_CALC_FOUND_ROWS` | TiDB 出于兼容性解析这个语法,但是不做任何处理| +|`SQL_CACHE`、`SQL_NO_CACHE` | 是否把请求结果缓存到 TiKV (RocksDB) 的 `BlockCache` 中。对于一次性的大数据量的查询,比如 `count(*)` 查询,为了避免冲掉 `BlockCache` 中用户的热点数据,建议填上 `SQL_NO_CACHE` | +|`STRAIGHT_JOIN`|`STRAIGHT_JOIN` 会强制优化器按照 `FROM` 子句中所使用的表的顺序做联合查询。当优化器选择的 Join 顺序并不优秀时,你可以使用这个语法来加速查询的执行| +|`select_expr` | 投影操作列表,一般包括列名、表达式,或者是用 '\*' 表示全部列| +|`FROM table_references` | 表示数据来源,数据来源可以是一个表(`select * from t;`)或者是多个表 (`select * from t1 join t2;`) 或者是0个表 (`select 1+1 from dual;`, 等价于 `select 1+1;`)| +|`WHERE where_condition` | Where 子句用于设置过滤条件,查询结果中只会包含满足条件的数据| +|`GROUP BY` | GroupBy 子句用于对查询结果集进行分组| +|`HAVING where_condition` | Having 子句与 Where 子句作用类似,Having 子句可以让过滤 GroupBy 后的各种数据,Where 子句用于在聚合前过滤记录。| +|`ORDER BY` | OrderBy 子句用于指定结果排序顺序,可以按照列、表达式或者是 `select_expr` 列表中某个位置的字段进行排序。| +|`LIMIT` | Limit 子句用于限制结果条数。Limit 接受一个或两个数字参数,如果只有一个参数,那么表示返回数据的最大行数;如果是两个参数,那么第一个参数表示返回数据的第一行的偏移量(第一行数据的偏移量是 0),第二个参数指定返回数据的最大条目数。| +|`FOR UPDATE` | 对查询结果集所有行上锁(对于在查询条件内,但是不在结果集的行,将不会加锁,如事务启动后由其他事务写入的行),以监测其他事务对这些的并发修改。TiDB 使用[乐观事务模型](/dev/reference/transactions/transaction-model.md#事务模型)在语句执行期间不会检测锁,因此,不会像 PostgreSQL 之类的数据库一样,在当前事务结束前阻止其他事务执行 UPDATE、DELETE 和 SELECT FOR UPDATE。在事务的提交阶段 SELECT FOR UPDATE 读到的行,也会进行两阶段提交,因此,它们也可以参与事务冲突检测。如发生写入冲突,那么包含 SELECT FOR UPDATE 语句的事务会提交失败。如果没有冲突,事务将成功提交,当提交结束时,这些被加锁的行,会产生一个新版本,可以让其他尚未提交的事务,在将来提交时发现写入冲突。| +|`LOCK IN SHARE MODE` | TiDB 出于兼容性解析这个语法,但是不做任何处理| + +## 示例 + +```sql +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> SELECT * FROM t1; ++----+----+ +| id | c1 | ++----+----+ +| 1 | 1 | +| 2 | 2 | +| 3 | 3 | +| 4 | 4 | +| 5 | 5 | ++----+----+ +5 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SELECT` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [INSERT](/dev/reference/sql/statements/insert.md) +* [DELETE](/dev/reference/sql/statements/delete.md) +* [UPDATE](/dev/reference/sql/statements/update.md) +* [REPLACE](/dev/reference/sql/statements/replace.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/set-names.md b/dev/reference/sql/statements/set-names.md new file mode 100644 index 000000000000..f109e75361c0 --- /dev/null +++ b/dev/reference/sql/statements/set-names.md @@ -0,0 +1,80 @@ +--- +title: SET [NAMES|CHARACTER SET] +summary: TiDB 数据库中 SET [NAMES|CHARACTER SET] 的使用概况。 +category: reference +--- + +# SET [NAMES|CHARACTER SET] + +`SET NAMES`,`SET CHARACTER SET` 和 `SET CHARSET` 语句用于修改当前连接的变量 `character_set_client`,`character_set_results` 和 `character_set_connection`。 + +## 语法图 + +**SetStmt:** + +![SetStmt](/media/sqlgram/SetStmt.png) + +## 示例 + +```sql +mysql> SHOW VARIABLES LIKE 'character_set%'; ++--------------------------+--------------------------------------------------------+ +| Variable_name | Value | ++--------------------------+--------------------------------------------------------+ +| character_sets_dir | /usr/local/mysql-5.6.25-osx10.8-x86_64/share/charsets/ | +| character_set_connection | utf8mb4 | +| character_set_system | utf8 | +| character_set_results | utf8mb4 | +| character_set_client | utf8mb4 | +| character_set_database | utf8mb4 | +| character_set_filesystem | binary | +| character_set_server | utf8mb4 | ++--------------------------+--------------------------------------------------------+ +8 rows in set (0.01 sec) + +mysql> SET NAMES utf8; +Query OK, 0 rows affected (0.00 sec) + +mysql> SHOW VARIABLES LIKE 'character_set%'; ++--------------------------+--------------------------------------------------------+ +| Variable_name | Value | ++--------------------------+--------------------------------------------------------+ +| character_sets_dir | /usr/local/mysql-5.6.25-osx10.8-x86_64/share/charsets/ | +| character_set_connection | utf8 | +| character_set_system | utf8 | +| character_set_results | utf8 | +| character_set_client | utf8 | +| character_set_server | utf8mb4 | +| character_set_database | utf8mb4 | +| character_set_filesystem | binary | ++--------------------------+--------------------------------------------------------+ +8 rows in set (0.00 sec) + +mysql> SET CHARACTER SET utf8mb4; +Query OK, 0 rows affected (0.00 sec) + +mysql> SHOW VARIABLES LIKE 'character_set%'; ++--------------------------+--------------------------------------------------------+ +| Variable_name | Value | ++--------------------------+--------------------------------------------------------+ +| character_set_connection | utf8mb4 | +| character_set_system | utf8 | +| character_set_results | utf8mb4 | +| character_set_client | utf8mb4 | +| character_sets_dir | /usr/local/mysql-5.6.25-osx10.8-x86_64/share/charsets/ | +| character_set_database | utf8mb4 | +| character_set_filesystem | binary | +| character_set_server | utf8mb4 | ++--------------------------+--------------------------------------------------------+ +8 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SET [NAMES|CHARACTER SET]` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW \[GLOBAL|SESSION\] VARIABLES](/dev/reference/sql/statements/show-variables.md) +* [SET ](/dev/reference/sql/statements/set-variable.md) +* [Character Set Support](/dev/reference/sql/character-set.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/set-password.md b/dev/reference/sql/statements/set-password.md new file mode 100644 index 000000000000..f6a2b902b107 --- /dev/null +++ b/dev/reference/sql/statements/set-password.md @@ -0,0 +1,64 @@ +--- +title: SET PASSWORD +summary: TiDB 数据库中 SET PASSWORD 的使用概况。 +category: reference +--- + +# SET PASSWORD + +`SET PASSWORD` 语句用于更改 TiDB 系统数据库中的用户密码。 + +## 语法图 + +**SetStmt:** + +![SetStmt](/media/sqlgram/SetStmt.png) + +## 示例 + +```sql +mysql> SET PASSWORD='test'; -- change my password +Query OK, 0 rows affected (0.01 sec) + +mysql> CREATE USER 'newuser' IDENTIFIED BY 'test'; +Query OK, 1 row affected (0.00 sec) + +mysql> SHOW CREATE USER newuser; ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER for newuser@% | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER 'newuser'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> SET PASSWORD FOR newuser = 'test'; +Query OK, 0 rows affected (0.01 sec) + +mysql> SHOW CREATE USER newuser; ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER for newuser@% | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER 'newuser'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> SET PASSWORD FOR newuser = PASSWORD('test'); -- deprecated syntax from earlier MySQL releases +Query OK, 0 rows affected (0.00 sec) + +mysql> SHOW CREATE USER newuser; ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER for newuser@% | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER 'newuser'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK | ++----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SET PASSWORD` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [CREATE USER](/dev/reference/sql/statements/create-user.md) +* [Privilege Management](/dev/reference/security/privilege-system.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/set-transaction.md b/dev/reference/sql/statements/set-transaction.md new file mode 100644 index 000000000000..3093722bed15 --- /dev/null +++ b/dev/reference/sql/statements/set-transaction.md @@ -0,0 +1,68 @@ +--- +title: SET TRANSACTION +summary: TiDB 数据库中 SET TRANSACTION 的使用概况。 +category: reference +--- + +# SET TRANSACTION + +`SET TRANSACTION` 语句用于在 `GLOBAL` 或 `SESSION` 的基础上更改当前的隔离级别,是 `SET transaction_isolation ='new-value'` 的替代语句,提供 MySQL 和 SQL 标准的兼容性。 + +## 语法图 + +**SetStmt:** + +![SetStmt](/media/sqlgram/SetStmt.png) + +**TransactionChar:** + +![TransactionChar](/media/sqlgram/TransactionChar.png) + +**IsolationLevel:** + +![IsolationLevel](/media/sqlgram/IsolationLevel.png) + +## 示例 + +```sql +mysql> SHOW SESSION VARIABLES like 'transaction_isolation'; ++-----------------------+-----------------+ +| Variable_name | Value | ++-----------------------+-----------------+ +| transaction_isolation | REPEATABLE-READ | ++-----------------------+-----------------+ +1 row in set (0.00 sec) + +mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; +Query OK, 0 rows affected (0.00 sec) + +mysql> SHOW SESSION VARIABLES like 'transaction_isolation'; ++-----------------------+----------------+ +| Variable_name | Value | ++-----------------------+----------------+ +| transaction_isolation | READ-COMMITTED | ++-----------------------+----------------+ +1 row in set (0.01 sec) + +mysql> SET SESSION transaction_isolation = 'REPEATABLE-READ'; +Query OK, 0 rows affected (0.00 sec) + +mysql> SHOW SESSION VARIABLES like 'transaction_isolation'; ++-----------------------+-----------------+ +| Variable_name | Value | ++-----------------------+-----------------+ +| transaction_isolation | REPEATABLE-READ | ++-----------------------+-----------------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +* TiDB 支持仅在语法中将事务设置为只读的功能。 +* 不支持隔离级别 `READ-UNCOMMITTED` 和 `SERIALIZABLE`。 +* 隔离级别 `REPEATABLE-READ` 在技术上属于快照隔离(Snapshot Isolation)。在 TiDB 中称为 `REPEATABLE-READ` 是为了和 MySQL 保持一致。 + +## 另请参阅 + +* [SET \[GLOBAL|SESSION\] ](/dev/reference/sql/statements/set-variable.md) +* [Isolation Levels](/dev/reference/transactions/transaction-isolation.md) diff --git a/dev/reference/sql/statements/set-variable.md b/dev/reference/sql/statements/set-variable.md new file mode 100644 index 000000000000..fb1590be4715 --- /dev/null +++ b/dev/reference/sql/statements/set-variable.md @@ -0,0 +1,73 @@ +--- +title: SET [GLOBAL|SESSION] +summary: TiDB 数据库中 SET [GLOBAL|SESSION] 的使用概况。 +category: reference +--- + +# SET [GLOBAL|SESSION] + +`SET [GLOBAL|SESSION]` 语句用于在 `SESSION` 或 ` GLOBAL` 的范围内,对某个 TiDB 的内置变量进行更改。需注意,对 `GLOBAL` 变量的更改不适用于已有连接或本地连接,这与 MySQL 类似。只有新会话才会反映值的变化。 + +## 语法图 + +**SetStmt:** + +![SetStmt](/media/sqlgram/SetStmt.png) + +## 示例 + +```sql +mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode'; ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable_name | Value | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ +| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> SHOW SESSION VARIABLES LIKE 'sql_mode'; ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable_name | Value | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ +| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER'; +Query OK, 0 rows affected (0.03 sec) + +mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode'; ++---------------+-----------------------------------------+ +| Variable_name | Value | ++---------------+-----------------------------------------+ +| sql_mode | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER | ++---------------+-----------------------------------------+ +1 row in set (0.00 sec) + +mysql> SHOW SESSION VARIABLES LIKE 'sql_mode'; ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ +| Variable_name | Value | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ +| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | ++---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER'; +Query OK, 0 rows affected (0.01 sec) + +mysql> SHOW SESSION VARIABLES LIKE 'sql_mode'; ++---------------+-----------------------------------------+ +| Variable_name | Value | ++---------------+-----------------------------------------+ +| sql_mode | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER | ++---------------+-----------------------------------------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SET [GLOBAL|SESSION]` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW \[GLOBAL|SESSION\] VARIABLES](/dev/reference/sql/statements/show-variables.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-character-set.md b/dev/reference/sql/statements/show-character-set.md new file mode 100644 index 000000000000..a4092eacef14 --- /dev/null +++ b/dev/reference/sql/statements/show-character-set.md @@ -0,0 +1,47 @@ +--- +title: SHOW CHARACTER SET +summary: TiDB 数据库中 SHOW CHARACTER SET 的使用概况。 +category: reference +--- + +# SHOW CHARACTER SET + +`SHOW CHARACTER SET` 语句提供 TiDB 中可用字符集的静态列表。此列表不反映当前连接或用户的任何属性。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +**CharsetKw:** + +![CharsetKw](/media/sqlgram/CharsetKw.png) + +## 示例 + +```sql +mysql> SHOW CHARACTER SET; ++---------+---------------+-------------------+--------+ +| Charset | Description | Default collation | Maxlen | ++---------+---------------+-------------------+--------+ +| utf8 | UTF-8 Unicode | utf8_bin | 3 | +| utf8mb4 | UTF-8 Unicode | utf8mb4_bin | 4 | +| ascii | US ASCII | ascii_bin | 1 | +| latin1 | Latin1 | latin1_bin | 1 | +| binary | binary | binary | 1 | ++---------+---------------+-------------------+--------+ +5 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW CHARACTER SET` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW COLLATION](/dev/reference/sql/statements/show-collation.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-collation.md b/dev/reference/sql/statements/show-collation.md new file mode 100644 index 000000000000..db2deb05b517 --- /dev/null +++ b/dev/reference/sql/statements/show-collation.md @@ -0,0 +1,259 @@ +--- +title: SHOW COLLATION +summary: TiDB 数据库中 SHOW COLLATION 的使用概况。 +category: reference +--- + +# SHOW COLLATION + +`SHOW COLLATION` 语句用于提供一个静态的排序规则列表,确保与 MySQL 客户端库的兼容性。 + +> **注意:** TiDB 目前仅支持二进制排序规则。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +## 示例 + +```sql +mysql> SHOW COLLATION; ++--------------------------+----------+------+---------+----------+---------+ +| Collation | Charset | Id | Default | Compiled | Sortlen | ++--------------------------+----------+------+---------+----------+---------+ +| big5_chinese_ci | big5 | 1 | Yes | Yes | 1 | +| latin2_czech_cs | latin2 | 2 | | Yes | 1 | +| dec8_swedish_ci | dec8 | 3 | Yes | Yes | 1 | +| cp850_general_ci | cp850 | 4 | Yes | Yes | 1 | +| latin1_german1_ci | latin1 | 5 | | Yes | 1 | +| hp8_english_ci | hp8 | 6 | Yes | Yes | 1 | +| koi8r_general_ci | koi8r | 7 | Yes | Yes | 1 | +| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 | +| latin2_general_ci | latin2 | 9 | Yes | Yes | 1 | +| swe7_swedish_ci | swe7 | 10 | Yes | Yes | 1 | +| ascii_general_ci | ascii | 11 | Yes | Yes | 1 | +| ujis_japanese_ci | ujis | 12 | Yes | Yes | 1 | +| sjis_japanese_ci | sjis | 13 | Yes | Yes | 1 | +| cp1251_bulgarian_ci | cp1251 | 14 | | Yes | 1 | +| latin1_danish_ci | latin1 | 15 | | Yes | 1 | +| hebrew_general_ci | hebrew | 16 | Yes | Yes | 1 | +| tis620_thai_ci | tis620 | 18 | Yes | Yes | 1 | +| euckr_korean_ci | euckr | 19 | Yes | Yes | 1 | +| latin7_estonian_cs | latin7 | 20 | | Yes | 1 | +| latin2_hungarian_ci | latin2 | 21 | | Yes | 1 | +| koi8u_general_ci | koi8u | 22 | Yes | Yes | 1 | +| cp1251_ukrainian_ci | cp1251 | 23 | | Yes | 1 | +| gb2312_chinese_ci | gb2312 | 24 | Yes | Yes | 1 | +| greek_general_ci | greek | 25 | Yes | Yes | 1 | +| cp1250_general_ci | cp1250 | 26 | Yes | Yes | 1 | +| latin2_croatian_ci | latin2 | 27 | | Yes | 1 | +| gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 | +| cp1257_lithuanian_ci | cp1257 | 29 | | Yes | 1 | +| latin5_turkish_ci | latin5 | 30 | Yes | Yes | 1 | +| latin1_german2_ci | latin1 | 31 | | Yes | 1 | +| armscii8_general_ci | armscii8 | 32 | Yes | Yes | 1 | +| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 | +| cp1250_czech_cs | cp1250 | 34 | | Yes | 1 | +| ucs2_general_ci | ucs2 | 35 | Yes | Yes | 1 | +| cp866_general_ci | cp866 | 36 | Yes | Yes | 1 | +| keybcs2_general_ci | keybcs2 | 37 | Yes | Yes | 1 | +| macce_general_ci | macce | 38 | Yes | Yes | 1 | +| macroman_general_ci | macroman | 39 | Yes | Yes | 1 | +| cp852_general_ci | cp852 | 40 | Yes | Yes | 1 | +| latin7_general_ci | latin7 | 41 | Yes | Yes | 1 | +| latin7_general_cs | latin7 | 42 | | Yes | 1 | +| macce_bin | macce | 43 | | Yes | 1 | +| cp1250_croatian_ci | cp1250 | 44 | | Yes | 1 | +| utf8mb4_general_ci | utf8mb4 | 45 | Yes | Yes | 1 | +| utf8mb4_bin | utf8mb4 | 46 | | Yes | 1 | +| latin1_bin | latin1 | 47 | | Yes | 1 | +| latin1_general_ci | latin1 | 48 | | Yes | 1 | +| latin1_general_cs | latin1 | 49 | | Yes | 1 | +| cp1251_bin | cp1251 | 50 | | Yes | 1 | +| cp1251_general_ci | cp1251 | 51 | Yes | Yes | 1 | +| cp1251_general_cs | cp1251 | 52 | | Yes | 1 | +| macroman_bin | macroman | 53 | | Yes | 1 | +| utf16_general_ci | utf16 | 54 | Yes | Yes | 1 | +| utf16_bin | utf16 | 55 | | Yes | 1 | +| utf16le_general_ci | utf16le | 56 | Yes | Yes | 1 | +| cp1256_general_ci | cp1256 | 57 | Yes | Yes | 1 | +| cp1257_bin | cp1257 | 58 | | Yes | 1 | +| cp1257_general_ci | cp1257 | 59 | Yes | Yes | 1 | +| utf32_general_ci | utf32 | 60 | Yes | Yes | 1 | +| utf32_bin | utf32 | 61 | | Yes | 1 | +| utf16le_bin | utf16le | 62 | | Yes | 1 | +| binary | binary | 63 | Yes | Yes | 1 | +| armscii8_bin | armscii8 | 64 | | Yes | 1 | +| ascii_bin | ascii | 65 | | Yes | 1 | +| cp1250_bin | cp1250 | 66 | | Yes | 1 | +| cp1256_bin | cp1256 | 67 | | Yes | 1 | +| cp866_bin | cp866 | 68 | | Yes | 1 | +| dec8_bin | dec8 | 69 | | Yes | 1 | +| greek_bin | greek | 70 | | Yes | 1 | +| hebrew_bin | hebrew | 71 | | Yes | 1 | +| hp8_bin | hp8 | 72 | | Yes | 1 | +| keybcs2_bin | keybcs2 | 73 | | Yes | 1 | +| koi8r_bin | koi8r | 74 | | Yes | 1 | +| koi8u_bin | koi8u | 75 | | Yes | 1 | +| latin2_bin | latin2 | 77 | | Yes | 1 | +| latin5_bin | latin5 | 78 | | Yes | 1 | +| latin7_bin | latin7 | 79 | | Yes | 1 | +| cp850_bin | cp850 | 80 | | Yes | 1 | +| cp852_bin | cp852 | 81 | | Yes | 1 | +| swe7_bin | swe7 | 82 | | Yes | 1 | +| utf8_bin | utf8 | 83 | | Yes | 1 | +| big5_bin | big5 | 84 | | Yes | 1 | +| euckr_bin | euckr | 85 | | Yes | 1 | +| gb2312_bin | gb2312 | 86 | | Yes | 1 | +| gbk_bin | gbk | 87 | | Yes | 1 | +| sjis_bin | sjis | 88 | | Yes | 1 | +| tis620_bin | tis620 | 89 | | Yes | 1 | +| ucs2_bin | ucs2 | 90 | | Yes | 1 | +| ujis_bin | ujis | 91 | | Yes | 1 | +| geostd8_general_ci | geostd8 | 92 | Yes | Yes | 1 | +| geostd8_bin | geostd8 | 93 | | Yes | 1 | +| latin1_spanish_ci | latin1 | 94 | | Yes | 1 | +| cp932_japanese_ci | cp932 | 95 | Yes | Yes | 1 | +| cp932_bin | cp932 | 96 | | Yes | 1 | +| eucjpms_japanese_ci | eucjpms | 97 | Yes | Yes | 1 | +| eucjpms_bin | eucjpms | 98 | | Yes | 1 | +| cp1250_polish_ci | cp1250 | 99 | | Yes | 1 | +| utf16_unicode_ci | utf16 | 101 | | Yes | 1 | +| utf16_icelandic_ci | utf16 | 102 | | Yes | 1 | +| utf16_latvian_ci | utf16 | 103 | | Yes | 1 | +| utf16_romanian_ci | utf16 | 104 | | Yes | 1 | +| utf16_slovenian_ci | utf16 | 105 | | Yes | 1 | +| utf16_polish_ci | utf16 | 106 | | Yes | 1 | +| utf16_estonian_ci | utf16 | 107 | | Yes | 1 | +| utf16_spanish_ci | utf16 | 108 | | Yes | 1 | +| utf16_swedish_ci | utf16 | 109 | | Yes | 1 | +| utf16_turkish_ci | utf16 | 110 | | Yes | 1 | +| utf16_czech_ci | utf16 | 111 | | Yes | 1 | +| utf16_danish_ci | utf16 | 112 | | Yes | 1 | +| utf16_lithuanian_ci | utf16 | 113 | | Yes | 1 | +| utf16_slovak_ci | utf16 | 114 | | Yes | 1 | +| utf16_spanish2_ci | utf16 | 115 | | Yes | 1 | +| utf16_roman_ci | utf16 | 116 | | Yes | 1 | +| utf16_persian_ci | utf16 | 117 | | Yes | 1 | +| utf16_esperanto_ci | utf16 | 118 | | Yes | 1 | +| utf16_hungarian_ci | utf16 | 119 | | Yes | 1 | +| utf16_sinhala_ci | utf16 | 120 | | Yes | 1 | +| utf16_german2_ci | utf16 | 121 | | Yes | 1 | +| utf16_croatian_ci | utf16 | 122 | | Yes | 1 | +| utf16_unicode_520_ci | utf16 | 123 | | Yes | 1 | +| utf16_vietnamese_ci | utf16 | 124 | | Yes | 1 | +| ucs2_unicode_ci | ucs2 | 128 | | Yes | 1 | +| ucs2_icelandic_ci | ucs2 | 129 | | Yes | 1 | +| ucs2_latvian_ci | ucs2 | 130 | | Yes | 1 | +| ucs2_romanian_ci | ucs2 | 131 | | Yes | 1 | +| ucs2_slovenian_ci | ucs2 | 132 | | Yes | 1 | +| ucs2_polish_ci | ucs2 | 133 | | Yes | 1 | +| ucs2_estonian_ci | ucs2 | 134 | | Yes | 1 | +| ucs2_spanish_ci | ucs2 | 135 | | Yes | 1 | +| ucs2_swedish_ci | ucs2 | 136 | | Yes | 1 | +| ucs2_turkish_ci | ucs2 | 137 | | Yes | 1 | +| ucs2_czech_ci | ucs2 | 138 | | Yes | 1 | +| ucs2_danish_ci | ucs2 | 139 | | Yes | 1 | +| ucs2_lithuanian_ci | ucs2 | 140 | | Yes | 1 | +| ucs2_slovak_ci | ucs2 | 141 | | Yes | 1 | +| ucs2_spanish2_ci | ucs2 | 142 | | Yes | 1 | +| ucs2_roman_ci | ucs2 | 143 | | Yes | 1 | +| ucs2_persian_ci | ucs2 | 144 | | Yes | 1 | +| ucs2_esperanto_ci | ucs2 | 145 | | Yes | 1 | +| ucs2_hungarian_ci | ucs2 | 146 | | Yes | 1 | +| ucs2_sinhala_ci | ucs2 | 147 | | Yes | 1 | +| ucs2_german2_ci | ucs2 | 148 | | Yes | 1 | +| ucs2_croatian_ci | ucs2 | 149 | | Yes | 1 | +| ucs2_unicode_520_ci | ucs2 | 150 | | Yes | 1 | +| ucs2_vietnamese_ci | ucs2 | 151 | | Yes | 1 | +| ucs2_general_mysql500_ci | ucs2 | 159 | | Yes | 1 | +| utf32_unicode_ci | utf32 | 160 | | Yes | 1 | +| utf32_icelandic_ci | utf32 | 161 | | Yes | 1 | +| utf32_latvian_ci | utf32 | 162 | | Yes | 1 | +| utf32_romanian_ci | utf32 | 163 | | Yes | 1 | +| utf32_slovenian_ci | utf32 | 164 | | Yes | 1 | +| utf32_polish_ci | utf32 | 165 | | Yes | 1 | +| utf32_estonian_ci | utf32 | 166 | | Yes | 1 | +| utf32_spanish_ci | utf32 | 167 | | Yes | 1 | +| utf32_swedish_ci | utf32 | 168 | | Yes | 1 | +| utf32_turkish_ci | utf32 | 169 | | Yes | 1 | +| utf32_czech_ci | utf32 | 170 | | Yes | 1 | +| utf32_danish_ci | utf32 | 171 | | Yes | 1 | +| utf32_lithuanian_ci | utf32 | 172 | | Yes | 1 | +| utf32_slovak_ci | utf32 | 173 | | Yes | 1 | +| utf32_spanish2_ci | utf32 | 174 | | Yes | 1 | +| utf32_roman_ci | utf32 | 175 | | Yes | 1 | +| utf32_persian_ci | utf32 | 176 | | Yes | 1 | +| utf32_esperanto_ci | utf32 | 177 | | Yes | 1 | +| utf32_hungarian_ci | utf32 | 178 | | Yes | 1 | +| utf32_sinhala_ci | utf32 | 179 | | Yes | 1 | +| utf32_german2_ci | utf32 | 180 | | Yes | 1 | +| utf32_croatian_ci | utf32 | 181 | | Yes | 1 | +| utf32_unicode_520_ci | utf32 | 182 | | Yes | 1 | +| utf32_vietnamese_ci | utf32 | 183 | | Yes | 1 | +| utf8_unicode_ci | utf8 | 192 | | Yes | 1 | +| utf8_icelandic_ci | utf8 | 193 | | Yes | 1 | +| utf8_latvian_ci | utf8 | 194 | | Yes | 1 | +| utf8_romanian_ci | utf8 | 195 | | Yes | 1 | +| utf8_slovenian_ci | utf8 | 196 | | Yes | 1 | +| utf8_polish_ci | utf8 | 197 | | Yes | 1 | +| utf8_estonian_ci | utf8 | 198 | | Yes | 1 | +| utf8_spanish_ci | utf8 | 199 | | Yes | 1 | +| utf8_swedish_ci | utf8 | 200 | | Yes | 1 | +| utf8_turkish_ci | utf8 | 201 | | Yes | 1 | +| utf8_czech_ci | utf8 | 202 | | Yes | 1 | +| utf8_danish_ci | utf8 | 203 | | Yes | 1 | +| utf8_lithuanian_ci | utf8 | 204 | | Yes | 1 | +| utf8_slovak_ci | utf8 | 205 | | Yes | 1 | +| utf8_spanish2_ci | utf8 | 206 | | Yes | 1 | +| utf8_roman_ci | utf8 | 207 | | Yes | 1 | +| utf8_persian_ci | utf8 | 208 | | Yes | 1 | +| utf8_esperanto_ci | utf8 | 209 | | Yes | 1 | +| utf8_hungarian_ci | utf8 | 210 | | Yes | 1 | +| utf8_sinhala_ci | utf8 | 211 | | Yes | 1 | +| utf8_german2_ci | utf8 | 212 | | Yes | 1 | +| utf8_croatian_ci | utf8 | 213 | | Yes | 1 | +| utf8_unicode_520_ci | utf8 | 214 | | Yes | 1 | +| utf8_vietnamese_ci | utf8 | 215 | | Yes | 1 | +| utf8_general_mysql500_ci | utf8 | 223 | | Yes | 1 | +| utf8mb4_unicode_ci | utf8mb4 | 224 | | Yes | 1 | +| utf8mb4_icelandic_ci | utf8mb4 | 225 | | Yes | 1 | +| utf8mb4_latvian_ci | utf8mb4 | 226 | | Yes | 1 | +| utf8mb4_romanian_ci | utf8mb4 | 227 | | Yes | 1 | +| utf8mb4_slovenian_ci | utf8mb4 | 228 | | Yes | 1 | +| utf8mb4_polish_ci | utf8mb4 | 229 | | Yes | 1 | +| utf8mb4_estonian_ci | utf8mb4 | 230 | | Yes | 1 | +| utf8mb4_spanish_ci | utf8mb4 | 231 | | Yes | 1 | +| utf8mb4_swedish_ci | utf8mb4 | 232 | | Yes | 1 | +| utf8mb4_turkish_ci | utf8mb4 | 233 | | Yes | 1 | +| utf8mb4_czech_ci | utf8mb4 | 234 | | Yes | 1 | +| utf8mb4_danish_ci | utf8mb4 | 235 | | Yes | 1 | +| utf8mb4_lithuanian_ci | utf8mb4 | 236 | | Yes | 1 | +| utf8mb4_slovak_ci | utf8mb4 | 237 | | Yes | 1 | +| utf8mb4_spanish2_ci | utf8mb4 | 238 | | Yes | 1 | +| utf8mb4_roman_ci | utf8mb4 | 239 | | Yes | 1 | +| utf8mb4_persian_ci | utf8mb4 | 240 | | Yes | 1 | +| utf8mb4_esperanto_ci | utf8mb4 | 241 | | Yes | 1 | +| utf8mb4_hungarian_ci | utf8mb4 | 242 | | Yes | 1 | +| utf8mb4_sinhala_ci | utf8mb4 | 243 | | Yes | 1 | +| utf8mb4_german2_ci | utf8mb4 | 244 | | Yes | 1 | +| utf8mb4_croatian_ci | utf8mb4 | 245 | | Yes | 1 | +| utf8mb4_unicode_520_ci | utf8mb4 | 246 | | Yes | 1 | +| utf8mb4_vietnamese_ci | utf8mb4 | 247 | | Yes | 1 | ++--------------------------+----------+------+---------+----------+---------+ +219 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +TiDB 不支持二进制以外的排序规则。`SHOW COLLATION` 语句仅用于确保与 MySQL 的兼容性。 + +## 另请参阅 + +* [SHOW CHARACTER SET](/dev/reference/sql/statements/show-character-set.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-columns-from.md b/dev/reference/sql/statements/show-columns-from.md new file mode 100644 index 000000000000..8f80a864ee99 --- /dev/null +++ b/dev/reference/sql/statements/show-columns-from.md @@ -0,0 +1,124 @@ +--- +title: SHOW [FULL] COLUMNS FROM +summary: TiDB 数据库中 SHOW [FULL] COLUMNS FROM 的使用概况。 +category: reference +--- + +# SHOW [FULL] COLUMNS FROM + +`SHOW [FULL] COLUMNS FROM` 语句用于以表格格式描述表或视图中的列。可选关键字 `FULL` 用于显示当前用户对该列的权限,以及表定义中的 `comment`。 + +`SHOW [FULL] FIELDS FROM`,`DESC `,`DESCRIBE
` 和 `EXPLAIN
` 语句都是 `SHOW [FULL] COLUMNS FROM` 的别名。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +**OptFull:** + +![OptFull](/media/sqlgram/OptFull.png) + +## 示例 + +```sql +mysql> create view v1 as select 1; +Query OK, 0 rows affected (0.11 sec) + +mysql> show columns from v1; ++-------+-----------+------+------+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+-----------+------+------+---------+-------+ +| 1 | bigint(1) | YES | | NULL | | ++-------+-----------+------+------+---------+-------+ +1 row in set (0.00 sec) + +mysql> desc v1; ++-------+-----------+------+------+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+-----------+------+------+---------+-------+ +| 1 | bigint(1) | YES | | NULL | | ++-------+-----------+------+------+---------+-------+ +1 row in set (0.00 sec) + +mysql> describe v1; ++-------+-----------+------+------+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+-----------+------+------+---------+-------+ +| 1 | bigint(1) | YES | | NULL | | ++-------+-----------+------+------+---------+-------+ +1 row in set (0.00 sec) + +mysql> explain v1; ++-------+-----------+------+------+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+-----------+------+------+---------+-------+ +| 1 | bigint(1) | YES | | NULL | | ++-------+-----------+------+------+---------+-------+ +1 row in set (0.00 sec) + +mysql> show fields from v1; ++-------+-----------+------+------+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+-----------+------+------+---------+-------+ +| 1 | bigint(1) | YES | | NULL | | ++-------+-----------+------+------+---------+-------+ +1 row in set (0.00 sec) + +mysql> show full columns from v1; ++-------+-----------+-----------+------+------+---------+-------+---------------------------------+---------+ +| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | ++-------+-----------+-----------+------+------+---------+-------+---------------------------------+---------+ +| 1 | bigint(1) | NULL | YES | | NULL | | select,insert,update,references | | ++-------+-----------+-----------+------+------+---------+-------+---------------------------------+---------+ +1 row in set (0.00 sec) + +mysql> show full columns from mysql.user; ++-----------------------+---------------+-------------+------+------+---------+-------+---------------------------------+---------+ +| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | ++-----------------------+---------------+-------------+------+------+---------+-------+---------------------------------+---------+ +| Host | char(64) | utf8mb4_bin | NO | PRI | NULL | | select,insert,update,references | | +| User | char(32) | utf8mb4_bin | NO | PRI | NULL | | select,insert,update,references | | +| Password | char(41) | utf8mb4_bin | YES | | NULL | | select,insert,update,references | | +| Select_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Insert_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Update_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Delete_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Create_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Drop_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Process_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Grant_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| References_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Alter_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Show_db_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Super_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Create_tmp_table_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Lock_tables_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Execute_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Create_view_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Show_view_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Create_routine_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Alter_routine_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Index_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Create_user_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Event_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Trigger_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Create_role_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Drop_role_priv | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | +| Account_locked | enum('N','Y') | utf8mb4_bin | NO | | N | | select,insert,update,references | | ++-----------------------+---------------+-------------+------+------+---------+-------+---------------------------------+---------+ +29 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW [FULL] COLUMNS FROM` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-create-table.md b/dev/reference/sql/statements/show-create-table.md new file mode 100644 index 000000000000..36fe82bd8fb7 --- /dev/null +++ b/dev/reference/sql/statements/show-create-table.md @@ -0,0 +1,47 @@ +--- +title: SHOW CREATE TABLE +summary: TiDB 数据库中 SHOW CREATE TABLE 的使用概况。 +category: reference +--- + +# SHOW CREATE TABLE + +`SHOW CREATE TABLE` 语句用于显示用 SQL 重新创建已有表的确切语句。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a INT); +Query OK, 0 rows affected (0.12 sec) + +mysql> SHOW CREATE TABLE t1; ++-------+------------------------------------------------------------------------------------------------------------+ +| Table | Create Table | ++-------+------------------------------------------------------------------------------------------------------------+ +| t1 | CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin | ++-------+------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW CREATE TABLE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [DROP TABLE](/dev/reference/sql/statements/drop-table.md) +* [SHOW TABLES](/dev/reference/sql/statements/show-tables.md) +* [SHOW COLUMNS FROM](/dev/reference/sql/statements/show-columns-from.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-create-user.md b/dev/reference/sql/statements/show-create-user.md new file mode 100644 index 000000000000..b2305e9cbe27 --- /dev/null +++ b/dev/reference/sql/statements/show-create-user.md @@ -0,0 +1,49 @@ +--- +title: SHOW CREATE USER +summary: TiDB 数据库中 SHOW CREATE USER 的使用概况。 +category: reference +--- + +# SHOW CREATE USER + +`SHOW CREATE USER` 语句用于显示如何使用 `CREATE USER` 语法来重新创建用户。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**Username:** + +![Username](/media/sqlgram/Username.png) + +## 示例 + +```sql +mysql> SHOW CREATE USER 'root'; ++--------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER for root@% | ++--------------------------------------------------------------------------------------------------------------------------+ +| CREATE USER 'root'@'%' IDENTIFIED WITH 'mysql_native_password' AS '' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK | ++--------------------------------------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> SHOW GRANTS FOR 'root'; ++-------------------------------------------+ +| Grants for root@% | ++-------------------------------------------+ +| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' | ++-------------------------------------------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +* `SHOW CREATE USER` 的输出结果旨在匹配 MySQL,但 TiDB 尚不支持若干 `CREATE` 选项。尚未支持的选项在语句执行过程中会被解析但会被跳过执行。详情可参阅 [security compatibility]。 + +## 另请参阅 + +* [CREATE USER](/dev/reference/sql/statements/create-user.md) +* [SHOW GRANTS](/dev/reference/sql/statements/show-grants.md) +* [DROP USER](/dev/reference/sql/statements/drop-user.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-databases.md b/dev/reference/sql/statements/show-databases.md new file mode 100644 index 000000000000..5571419cc1a0 --- /dev/null +++ b/dev/reference/sql/statements/show-databases.md @@ -0,0 +1,61 @@ +--- +title: SHOW DATABASES +summary: TiDB 数据库中 SHOW DATABASES 的使用概况。 +category: reference +--- + +# SHOW DATABASES + +`SHOW DATABASES` 语句用于显示当前用户有权访问的数据库列表。当前用户无权访问的数据库将从列表中隐藏。`information_schema` 数据库始终出现在列表的最前面。 + +`SHOW SCHEMAS` 是 `SHOW DATABASES` 语句的别名。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +## 示例 + +```sql +mysql> SHOW DATABASES; ++--------------------+ +| Database | ++--------------------+ +| INFORMATION_SCHEMA | +| PERFORMANCE_SCHEMA | +| mysql | +| test | ++--------------------+ +4 rows in set (0.00 sec) + +mysql> CREATE DATABASE mynewdb; +Query OK, 0 rows affected (0.10 sec) + +mysql> SHOW DATABASES; ++--------------------+ +| Database | ++--------------------+ +| INFORMATION_SCHEMA | +| PERFORMANCE_SCHEMA | +| mynewdb | +| mysql | +| test | ++--------------------+ +5 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW DATABASES` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW SCHEMAS](/dev/reference/sql/statements/show-schemas.md) +* [DROP DATABASE](/dev/reference/sql/statements/drop-database.md) +* [CREATE DATABASE](/dev/reference/sql/statements/create-database.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-engines.md b/dev/reference/sql/statements/show-engines.md new file mode 100644 index 000000000000..7207505c6c37 --- /dev/null +++ b/dev/reference/sql/statements/show-engines.md @@ -0,0 +1,31 @@ +--- +title: SHOW ENGINES +summary: TiDB 数据库中 SHOW ENGINES 的使用概况。 +category: reference +--- + +# SHOW ENGINES + +`SHOW ENGINES` 语句仅提供 MySQL 兼容性。 + +## 语法图 + +```sql +SHOW ENGINES +``` + +## 示例 + +```sql +mysql> SHOW ENGINES; ++--------+---------+------------------------------------------------------------+--------------+------+------------+ +| Engine | Support | Comment | Transactions | XA | Savepoints | ++--------+---------+------------------------------------------------------------+--------------+------+------------+ +| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | ++--------+---------+------------------------------------------------------------+--------------+------+------------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +* `SHOW ENGINES` 语句始终只返回 InnoDB 作为其支持的引擎。但 TiDB 内部通常使用 TiKV 作为存储引擎。 \ No newline at end of file diff --git a/dev/reference/sql/statements/show-errors.md b/dev/reference/sql/statements/show-errors.md new file mode 100644 index 000000000000..998daa5bf418 --- /dev/null +++ b/dev/reference/sql/statements/show-errors.md @@ -0,0 +1,59 @@ +--- +title: SHOW ERRORS +summary: TiDB 数据库中 SHOW ERRORS 的使用概况。 +category: reference +--- + +# SHOW ERRORS + +`SHOW ERRORS` 语句用于显示已执行语句中的错误。一旦先前的语句成功执行,就会清除错误缓冲区,这时 `SHOW ERRORS` 会返回一个空集。 + +当前的 `sql_mode` 很大程度决定了哪些语句会产生错误与警告。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +## 示例 + +```sql +mysql> select invalid; +ERROR 1054 (42S22): Unknown column 'invalid' in 'field list' +mysql> create invalid; +ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 14 near "invalid" +mysql> SHOW ERRORS; ++-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Level | Code | Message | ++-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Error | 1054 | Unknown column 'invalid' in 'field list' | +| Error | 1064 | You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 14 near "invalid" | ++-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+ +2 rows in set (0.00 sec) + +mysql> CREATE invalid2; +ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 15 near "invalid2" +mysql> SELECT 1; ++------+ +| 1 | ++------+ +| 1 | ++------+ +1 row in set (0.00 sec) + +mysql> SHOW ERRORS; +Empty set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW ERRORS` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW WARNINGS](/dev/reference/sql/statements/show-warnings.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-fields-from.md b/dev/reference/sql/statements/show-fields-from.md new file mode 100644 index 000000000000..888f63f92614 --- /dev/null +++ b/dev/reference/sql/statements/show-fields-from.md @@ -0,0 +1,9 @@ +--- +title: SHOW [FULL] FIELDS FROM +summary: TiDB 数据库中 SHOW [FULL] FIELDS FROM 的使用概况。 +category: reference +--- + +# SHOW [FULL] FIELDS FROM + +`SHOW [FULL] FIELDS FROM` 是 [`SHOW [FULL] COLUMNS FROM`](/dev/reference/sql/statements/show-columns-from.md) 的别名。包含该语句提供了 MySQL 兼容性。 \ No newline at end of file diff --git a/dev/reference/sql/statements/show-grants.md b/dev/reference/sql/statements/show-grants.md new file mode 100644 index 000000000000..e432cf70a7e2 --- /dev/null +++ b/dev/reference/sql/statements/show-grants.md @@ -0,0 +1,57 @@ +--- +title: SHOW GRANTS +summary: TiDB 数据库中 SHOW GRANTS 的使用概况。 +category: reference +--- + +# SHOW GRANTS + +`SHOW GRANTS` 语句用于显示与用户关联的权限列表。与在 MySQL 中一样,`USAGE` 权限表示登录 TiDB 的能力。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**Username:** + +![Username](/media/sqlgram/Username.png) + +## 示例 + +```sql +mysql> SHOW GRANTS; ++-------------------------------------------+ +| Grants for User | ++-------------------------------------------+ +| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' | ++-------------------------------------------+ +1 row in set (0.00 sec) + +mysql> SHOW GRANTS FOR 'u1'; +ERROR 1141 (42000): There is no such grant defined for user 'u1' on host '%' +mysql> CREATE USER u1; +Query OK, 1 row affected (0.04 sec) + +mysql> GRANT SELECT ON test.* TO u1; +Query OK, 0 rows affected (0.04 sec) + +mysql> SHOW GRANTS FOR u1; ++------------------------------------+ +| Grants for u1@% | ++------------------------------------+ +| GRANT USAGE ON *.* TO 'u1'@'%' | +| GRANT Select ON test.* TO 'u1'@'%' | ++------------------------------------+ +2 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW GRANTS` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW CREATE USER](/dev/reference/sql/statements/show-create-user.md) +* [GRANT](/dev/reference/sql/statements/grant.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-index.md b/dev/reference/sql/statements/show-index.md new file mode 100644 index 000000000000..edf45b6f6bab --- /dev/null +++ b/dev/reference/sql/statements/show-index.md @@ -0,0 +1,9 @@ +--- +title: SHOW INDEX [FROM|IN] +summary: TiDB 数据库中 SHOW INDEX [FROM|IN] 的使用概况。 +category: reference +--- + +# SHOW INDEX [FROM|IN] + +`SHOW INDEX [FROM|IN]` 语句是 [`SHOW INDEXES [FROM|IN]`](/dev/reference/sql/statements/show-indexes.md) 的别名。包含该语句提供了 MySQL 兼容性。 \ No newline at end of file diff --git a/dev/reference/sql/statements/show-indexes.md b/dev/reference/sql/statements/show-indexes.md new file mode 100644 index 000000000000..e4c4666d2205 --- /dev/null +++ b/dev/reference/sql/statements/show-indexes.md @@ -0,0 +1,75 @@ +--- +title: SHOW INDEXES [FROM|IN] +summary: TiDB 数据库中 SHOW INDEXES [FROM|IN] 的使用概况。 +category: reference +--- + +# SHOW INDEXES [FROM|IN] + +`SHOW INDEXES [FROM|IN]` 语句用于列出指定表上的索引。`SHOW INDEX [FROM | IN]` 和 `SHOW KEYS [FROM | IN]` 是该语句的别名。包含该语句提供了 MySQL 兼容性。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +**ShowIndexKwd:** + +![ShowIndexKwd](/media/sqlgram/ShowIndexKwd.png) + +**FromOrIn:** + +![FromOrIn](/media/sqlgram/FromOrIn.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (id int not null primary key auto_increment, col1 INT, INDEX(col1)); +Query OK, 0 rows affected (0.12 sec) + +mysql> SHOW INDEXES FROM t1; ++-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ +| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | ++-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ +| t1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | +| t1 | 1 | col1 | 1 | col1 | A | 0 | NULL | NULL | YES | BTREE | | | ++-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ +2 rows in set (0.00 sec) + +mysql> SHOW INDEX FROM t1; ++-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ +| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | ++-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ +| t1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | +| t1 | 1 | col1 | 1 | col1 | A | 0 | NULL | NULL | YES | BTREE | | | ++-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ +2 rows in set (0.00 sec) + +mysql> SHOW KEYS FROM t1; ++-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ +| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | ++-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ +| t1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | +| t1 | 1 | col1 | 1 | col1 | A | 0 | NULL | NULL | YES | BTREE | | | ++-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ +2 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW INDEXES [FROM|IN]` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) +* [DROP INDEX](/dev/reference/sql/statements/drop-index.md) +* [CREATE INDEX](/dev/reference/sql/statements/create-index.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-keys.md b/dev/reference/sql/statements/show-keys.md new file mode 100644 index 000000000000..655fc00ba515 --- /dev/null +++ b/dev/reference/sql/statements/show-keys.md @@ -0,0 +1,9 @@ +--- +title: SHOW KEYS [FROM|IN] +summary: TiDB 数据库中 SHOW KEYS [FROM|IN] 的使用概况。 +category: reference +--- + +# SHOW KEYS [FROM|IN] + +`SHOW KEYS [FROM|IN]` 语句是 [`SHOW INDEXES [FROM|IN]`](/dev/reference/sql/statements/show-indexes.md) 语句的别名。包含该语句提供了 MySQL 兼容性。。 \ No newline at end of file diff --git a/dev/reference/sql/statements/show-privileges.md b/dev/reference/sql/statements/show-privileges.md new file mode 100644 index 000000000000..286ecb610888 --- /dev/null +++ b/dev/reference/sql/statements/show-privileges.md @@ -0,0 +1,67 @@ +--- +title: SHOW PRIVILEGES +summary: TiDB 数据库中 SHOW PRIVILEGES 的使用概况。 +category: reference +--- + +# SHOW PRIVILEGES + +`SHOW PRIVILEGES` 语句用于显示 TiDB 中可分配权限的列表。此列表为静态列表,不反映当前用户的权限。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +## 示例 + +```sql +mysql> show privileges; ++-------------------------+---------------------------------------+-------------------------------------------------------+ +| Privilege | Context | Comment | ++-------------------------+---------------------------------------+-------------------------------------------------------+ +| Alter | Tables | To alter the table | +| Alter | Tables | To alter the table | +| Alter routine | Functions,Procedures | To alter or drop stored functions/procedures | +| Create | Databases,Tables,Indexes | To create new databases and tables | +| Create routine | Databases | To use CREATE FUNCTION/PROCEDURE | +| Create temporary tables | Databases | To use CREATE TEMPORARY TABLE | +| Create view | Tables | To create new views | +| Create user | Server Admin | To create new users | +| Delete | Tables | To delete existing rows | +| Drop | Databases,Tables | To drop databases, tables, and views | +| Event | Server Admin | To create, alter, drop and execute events | +| Execute | Functions,Procedures | To execute stored routines | +| File | File access on server | To read and write files on the server | +| Grant option | Databases,Tables,Functions,Procedures | To give to other users those privileges you possess | +| Index | Tables | To create or drop indexes | +| Insert | Tables | To insert data into tables | +| Lock tables | Databases | To use LOCK TABLES (together with SELECT privilege) | +| Process | Server Admin | To view the plain text of currently executing queries | +| Proxy | Server Admin | To make proxy user possible | +| References | Databases,Tables | To have references on tables | +| Reload | Server Admin | To reload or refresh tables, logs and privileges | +| Replication client | Server Admin | To ask where the slave or master servers are | +| Replication slave | Server Admin | To read binary log events from the master | +| Select | Tables | To retrieve rows from table | +| Show databases | Server Admin | To see all databases with SHOW DATABASES | +| Show view | Tables | To see views with SHOW CREATE VIEW | +| Shutdown | Server Admin | To shut down the server | +| Super | Server Admin | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc. | +| Trigger | Tables | To use triggers | +| Create tablespace | Server Admin | To create/alter/drop tablespaces | +| Update | Tables | To update existing rows | +| Usage | Server Admin | No privileges - allow connect only | ++-------------------------+---------------------------------------+-------------------------------------------------------+ +32 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW PRIVILEGES` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW GRANTS](/dev/reference/sql/statements/show-grants.md) +* [GRANT ](/dev/reference/sql/statements/grant-privileges.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-processlist.md b/dev/reference/sql/statements/show-processlist.md new file mode 100644 index 000000000000..846231272721 --- /dev/null +++ b/dev/reference/sql/statements/show-processlist.md @@ -0,0 +1,40 @@ +--- +title: SHOW [FULL] PROCESSLIST +summary: TiDB 数据库中 SHOW [FULL] PROCESSLIST 的使用概况。 +category: reference +--- + +# SHOW [FULL] PROCESSLIST + +`SHOW [FULL] PROCESSLIST` 语句列出连接到相同 TiDB 服务器的当前会话。`Info` 列包含查询文本,除非指定可选关键字 `FULL`,否则文本会被截断。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**OptFull:** + +![OptFull](/media/sqlgram/OptFull.png) + +## 示例 + +```sql +mysql> SHOW PROCESSLIST; ++------+------+-----------+------+---------+------+-------+------------------+ +| Id | User | Host | db | Command | Time | State | Info | ++------+------+-----------+------+---------+------+-------+------------------+ +| 1 | root | 127.0.0.1 | test | Query | 0 | 2 | SHOW PROCESSLIST | +| 2 | root | 127.0.0.1 | | Sleep | 4 | 2 | | ++------+------+-----------+------+---------+------+-------+------------------+ +2 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +* TiDB 中的 `State` 列是非描述性的。在 TiDB 中,将状态表示为单个值更复杂,因为查询是并行执行的,而且每个 GO 线程在任一时刻都有不同的状态。 + +## 另请参阅 + +* [KILL \[TIDB\]](/dev/reference/sql/statements/kill.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-schemas.md b/dev/reference/sql/statements/show-schemas.md new file mode 100644 index 000000000000..5572c81bea0e --- /dev/null +++ b/dev/reference/sql/statements/show-schemas.md @@ -0,0 +1,9 @@ +--- +title: SHOW SCHEMAS +summary: TiDB 数据库中 SHOW SCHEMAS 的使用概况。 +category: reference +--- + +# SHOW SCHEMAS + +`SHOW SCHEMAS` 语句是 [`SHOW DATABASES`](/dev/reference/sql/statements/show-databases.md) 的别名。包含该语句提供了 MySQL 兼容性。。 \ No newline at end of file diff --git a/dev/reference/sql/statements/show-status.md b/dev/reference/sql/statements/show-status.md new file mode 100644 index 000000000000..6bf876e2c56e --- /dev/null +++ b/dev/reference/sql/statements/show-status.md @@ -0,0 +1,61 @@ +--- +title: SHOW [GLOBAL|SESSION] STATUS +summary: TiDB 数据库中 SHOW [GLOBAL|SESSION] STATUS 的使用概况。 +category: reference +--- + +# SHOW [GLOBAL|SESSION] STATUS + +`SHOW [GLOBAL|SESSION] STATUS` 语句用于提供 MySQL 兼容性,对 TiDB 没有作用。因为 TiDB 使用 Prometheus 和 Grafana 而非 `SHOW STATUS` 来进行集中度量收集。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +**GlobalScope:** + +![GlobalScope](/media/sqlgram/GlobalScope.png) + +## 示例 + +```sql +mysql> show status; ++--------------------+--------------------------------------+ +| Variable_name | Value | ++--------------------+--------------------------------------+ +| Ssl_cipher_list | | +| server_id | 93e2e07d-6bb4-4a1b-90b7-e035fae154fe | +| ddl_schema_version | 141 | +| Ssl_verify_mode | 0 | +| Ssl_version | | +| Ssl_cipher | | ++--------------------+--------------------------------------+ +6 rows in set (0.01 sec) + +mysql> show global status; ++--------------------+--------------------------------------+ +| Variable_name | Value | ++--------------------+--------------------------------------+ +| Ssl_cipher | | +| Ssl_cipher_list | | +| Ssl_verify_mode | 0 | +| Ssl_version | | +| server_id | 93e2e07d-6bb4-4a1b-90b7-e035fae154fe | +| ddl_schema_version | 141 | ++--------------------+--------------------------------------+ +6 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW [GLOBAL|SESSION] STATUS` 语句仅用于提供 MySQL 兼容性。 + +## 另请参阅 + +* [FLUSH STATUS](/dev/reference/sql/statements/flush-status.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-table-status.md b/dev/reference/sql/statements/show-table-status.md new file mode 100644 index 000000000000..bf97fe41ee13 --- /dev/null +++ b/dev/reference/sql/statements/show-table-status.md @@ -0,0 +1,92 @@ +--- +title: SHOW TABLE STATUS +summary: TiDB 数据库中 SHOW TABLE STATUS 的使用概况。 +category: reference +--- + +# SHOW TABLE STATUS + +`SHOW TABLE STATUS` 语句用于显示 TiDB 中表的各种统计信息。如果显示统计信息过期,建议运行 [`ANALYZE TABLE`](/dev/reference/sql/statements/analyze-table.md)。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +**ShowDatabaseNameOpt:** + +![ShowDatabaseNameOpt](/media/sqlgram/ShowDatabaseNameOpt.png) + +## 示例 + +```sql +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.02 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +mysql> SHOW TABLE STATUS LIKE 't1'\G +*************************** 1. row *************************** + Name: t1 + Engine: InnoDB + Version: 10 + Row_format: Compact + Rows: 0 + Avg_row_length: 0 + Data_length: 0 +Max_data_length: 0 + Index_length: 0 + Data_free: 0 + Auto_increment: 30001 + Create_time: 2019-04-19 08:32:06 + Update_time: NULL + Check_time: NULL + Collation: utf8mb4_bin + Checksum: + Create_options: + Comment: +1 row in set (0.00 sec) + +mysql> analyze table t1; +Query OK, 0 rows affected (0.12 sec) + +mysql> SHOW TABLE STATUS LIKE 't1'\G +*************************** 1. row *************************** + Name: t1 + Engine: InnoDB + Version: 10 + Row_format: Compact + Rows: 5 + Avg_row_length: 16 + Data_length: 80 +Max_data_length: 0 + Index_length: 0 + Data_free: 0 + Auto_increment: 30001 + Create_time: 2019-04-19 08:32:06 + Update_time: NULL + Check_time: NULL + Collation: utf8mb4_bin + Checksum: + Create_options: + Comment: +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW TABLE STATUS` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW TABLES](/dev/reference/sql/statements/show-tables.md) +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [DROP TABLE](/dev/reference/sql/statements/drop-table.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-tables.md b/dev/reference/sql/statements/show-tables.md new file mode 100644 index 000000000000..27babad085f3 --- /dev/null +++ b/dev/reference/sql/statements/show-tables.md @@ -0,0 +1,86 @@ +--- +title: SHOW [FULL] TABLES +summary: TiDB 数据库中 SHOW [FULL] TABLES 的使用概况。 +category: reference +--- + +# SHOW [FULL] TABLES + +`SHOW [FULL] TABLES` 语句用于显示当前所选数据库中表和视图的列表。可选关键字 `FULL` 说明表的类型是 `BASE TABLE` 还是 `VIEW`。 + +若要在不同的数据库中显示表,可使用 `SHOW TABLES IN DatabaseName` 语句。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +**ShowDatabaseNameOpt:** + +![ShowDatabaseNameOpt](/media/sqlgram/ShowDatabaseNameOpt.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a int); +Query OK, 0 rows affected (0.12 sec) + +mysql> CREATE VIEW v1 AS SELECT 1; +Query OK, 0 rows affected (0.10 sec) + +mysql> SHOW TABLES; ++----------------+ +| Tables_in_test | ++----------------+ +| t1 | +| v1 | ++----------------+ +2 rows in set (0.00 sec) + +mysql> SHOW FULL TABLES; ++----------------+------------+ +| Tables_in_test | Table_type | ++----------------+------------+ +| t1 | BASE TABLE | +| v1 | VIEW | ++----------------+------------+ +2 rows in set (0.00 sec) + +mysql> SHOW TABLES IN mysql; ++----------------------+ +| Tables_in_mysql | ++----------------------+ +| GLOBAL_VARIABLES | +| bind_info | +| columns_priv | +| db | +| default_roles | +| gc_delete_range | +| gc_delete_range_done | +| help_topic | +| role_edges | +| stats_buckets | +| stats_feedback | +| stats_histograms | +| stats_meta | +| tables_priv | +| tidb | +| user | ++----------------------+ +16 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW [FULL] TABLES` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [DROP TABLE](/dev/reference/sql/statements/drop-table.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-variables.md b/dev/reference/sql/statements/show-variables.md new file mode 100644 index 000000000000..38020193fb2d --- /dev/null +++ b/dev/reference/sql/statements/show-variables.md @@ -0,0 +1,108 @@ +--- +title: SHOW [GLOBAL|SESSION] VARIABLES +summary: TiDB 数据库中 SHOW [GLOBAL|SESSION] VARIABLES 的使用概况。 +category: reference +--- + +# SHOW [GLOBAL|SESSION] VARIABLES + +`SHOW [GLOBAL|SESSION] VARIABLES` 语句用于显示 `GLOBAL` 或 `SESSION` 范围的变量列表。如果未指定范围,则应用默认范围 `SESSION`。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +**GlobalScope:** + +![GlobalScope](/media/sqlgram/GlobalScope.png) + +## 示例 + +```sql +mysql> SHOW GLOBAL VARIABLES LIKE 'tidb%'; ++------------------------------------+--------------+ +| Variable_name | Value | ++------------------------------------+--------------+ +| tidb_ddl_reorg_worker_cnt | 16 | +| tidb_check_mb4_value_in_utf8 | 1 | +| tidb_opt_agg_push_down | 0 | +| tidb_retry_limit | 10 | +| tidb_constraint_check_in_place | 0 | +| tidb_ddl_reorg_priority | PRIORITY_LOW | +| tidb_current_ts | 0 | +| tidb_mem_quota_indexlookupjoin | 34359738368 | +| tidb_query_log_max_len | 2048 | +| tidb_enable_cascades_planner | 0 | +| tidb_mem_quota_topn | 34359738368 | +| tidb_index_lookup_join_concurrency | 4 | +| tidb_auto_analyze_end_time | 23:59 +0000 | +| tidb_mem_quota_query | 34359738368 | +| tidb_optimizer_selectivity_level | 0 | +| tidb_index_serial_scan_concurrency | 1 | +| tidb_dml_batch_size | 20000 | +| tidb_max_chunk_size | 1024 | +| tidb_enable_table_partition | auto | +| tidb_mem_quota_indexlookupreader | 34359738368 | +| tidb_enable_window_function | 0 | +| tidb_opt_write_row_id | 0 | +| tidb_ddl_error_count_limit | 512 | +| tidb_batch_delete | 0 | +| tidb_mem_quota_sort | 34359738368 | +| tidb_enable_streaming | 0 | +| tidb_opt_insubq_to_join_and_agg | 1 | +| tidb_build_stats_concurrency | 4 | +| tidb_projection_concurrency | 4 | +| tidb_mem_quota_mergejoin | 34359738368 | +| tidb_hashagg_final_concurrency | 4 | +| tidb_checksum_table_concurrency | 4 | +| tidb_batch_insert | 0 | +| tidb_slow_query_file | | +| tidb_index_join_batch_size | 25000 | +| tidb_ddl_reorg_batch_size | 1024 | +| tidb_enable_fast_analyze | 0 | +| tidb_config | | +| tidb_distsql_scan_concurrency | 15 | +| tidb_hashagg_partial_concurrency | 4 | +| tidb_init_chunk_size | 32 | +| tidb_backoff_lock_fast | 100 | +| tidb_skip_utf8_check | 0 | +| tidb_hash_join_concurrency | 5 | +| tidb_index_lookup_concurrency | 4 | +| tidb_slow_log_threshold | 300 | +| tidb_index_lookup_size | 20000 | +| tidb_force_priority | NO_PRIORITY | +| tidb_auto_analyze_start_time | 00:00 +0000 | +| tidb_mem_quota_nestedloopapply | 34359738368 | +| tidb_snapshot | | +| tidb_general_log | 0 | +| tidb_batch_commit | 0 | +| tidb_enable_radix_join | 0 | +| tidb_skip_isolation_level_check | 0 | +| tidb_auto_analyze_ratio | 0.5 | +| tidb_disable_txn_auto_retry | 0 | +| tidb_mem_quota_hashjoin | 34359738368 | ++------------------------------------+--------------+ +58 rows in set (0.01 sec) + +mysql> SHOW GLOBAL VARIABLES LIKE 'time_zone%'; ++---------------+--------+ +| Variable_name | Value | ++---------------+--------+ +| time_zone | SYSTEM | ++---------------+--------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +`SHOW [GLOBAL|SESSION] VARIABLES` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SET](/dev/reference/sql/statements/set-session-variable.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/show-warnings.md b/dev/reference/sql/statements/show-warnings.md new file mode 100644 index 000000000000..39058943221e --- /dev/null +++ b/dev/reference/sql/statements/show-warnings.md @@ -0,0 +1,87 @@ +--- +title: SHOW WARNINGS +summary: TiDB 数据库中 SHOW WARNINGS 的使用概况。 +category: reference +--- + +# SHOW WARNINGS + +`SHOW WARNINGS` 语句用于显示当前客户端连接中已执行语句的报错列表。与在 MySQL 中一样,`sql_mode` 极大地影响哪些语句会导致错误与警告。 + +## 语法图 + +**ShowStmt:** + +![ShowStmt](/media/sqlgram/ShowStmt.png) + +**ShowTargetFilterable:** + +![ShowTargetFilterable](/media/sqlgram/ShowTargetFilterable.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a INT UNSIGNED); +Query OK, 0 rows affected (0.11 sec) + +mysql> INSERT INTO t1 VALUES (0); +Query OK, 1 row affected (0.02 sec) + +mysql> SELECT 1/a FROM t1; ++------+ +| 1/a | ++------+ +| NULL | ++------+ +1 row in set, 1 warning (0.00 sec) + +mysql> SHOW WARNINGS; ++---------+------+---------------+ +| Level | Code | Message | ++---------+------+---------------+ +| Warning | 1365 | Division by 0 | ++---------+------+---------------+ +1 row in set (0.00 sec) + +mysql> INSERT INTO t1 VALUES (-1); +ERROR 1264 (22003): Out of range value for column 'a' at row 1 +mysql> SELECT * FROM t1; ++------+ +| a | ++------+ +| 0 | ++------+ +1 row in set (0.00 sec) + +mysql> SET sql_mode=''; +Query OK, 0 rows affected (0.00 sec) + +mysql> INSERT INTO t1 VALUES (-1); +Query OK, 1 row affected, 1 warning (0.01 sec) + +mysql> SHOW WARNINGS; ++---------+------+---------------------------+ +| Level | Code | Message | ++---------+------+---------------------------+ +| Warning | 1690 | constant -1 overflows int | ++---------+------+---------------------------+ +1 row in set (0.00 sec) + +mysql> SELECT * FROM t1; ++------+ +| a | ++------+ +| 0 | +| 0 | ++------+ +2 rows in set (0.00 sec) + +``` + +## MySQL 兼容性 + +`SHOW WARNINGS` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [SHOW ERRORS](/dev/reference/sql/statements/show-errors.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/start-transaction.md b/dev/reference/sql/statements/start-transaction.md new file mode 100644 index 000000000000..6b14784c6f23 --- /dev/null +++ b/dev/reference/sql/statements/start-transaction.md @@ -0,0 +1,43 @@ +--- +title: START TRANSACTION +summary: TiDB 数据库中 START TRANSACTION 的使用概况。 +category: reference +--- + +# START TRANSACTION + +`START TRANSACTION` 语句用于在 TiDB 内部启动新事务。它类似于语句 `BEGIN` 和 `SET autocommit = 0`。 + +在没有 `START TRANSACTION` 语句的情况下,每个语句都会在各自的事务中自动提交,这样可确保 MySQL 兼容性。 + +## 语法图 + +**BeginTransactionStmt:** + +![BeginTransactionStmt](/media/sqlgram/BeginTransactionStmt.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a int NOT NULL PRIMARY KEY); +Query OK, 0 rows affected (0.12 sec) + +mysql> START TRANSACTION; +Query OK, 0 rows affected (0.00 sec) + +mysql> INSERT INTO t1 VALUES (1); +Query OK, 1 row affected (0.00 sec) + +mysql> COMMIT; +Query OK, 0 rows affected (0.01 sec) +``` + +## MySQL 兼容性 + +`START TRANSACTION` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [COMMIT](/dev/reference/sql/statements/commit.md) +* [ROLLBACK](/dev/reference/sql/statements/rollback.md) +* [BEGIN](/dev/reference/sql/statements/begin.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/trace.md b/dev/reference/sql/statements/trace.md new file mode 100644 index 000000000000..a58b9c74b7da --- /dev/null +++ b/dev/reference/sql/statements/trace.md @@ -0,0 +1,142 @@ +--- +title: TRACE +summary: TiDB 数据库中 TRACE 的使用概况。 +category: reference +--- + +# TRACE + +`TRACE` 语句用于提供查询执行的详细信息,可通过 TiDB 服务器状态端口所公开的图形界面进行查看。 + +## 语法图 +**TraceStmt:** + +![TraceStmt](/media/sqlgram/TraceStmt.png) + +**TraceableStmt:** + +![TraceableStmt](/media/sqlgram/TraceableStmt.png) + +## 示例 + +```sql +mysql> trace format='row' select * from mysql.user; ++---------------------------+-----------------+------------+ +| operation | startTS | duration | ++---------------------------+-----------------+------------+ +| session.getTxnFuture | 10:33:34.647148 | 3.847µs | +| ├─session.Execute | 10:33:34.647146 | 536.233µs | +| ├─session.ParseSQL | 10:33:34.647182 | 19.868µs | +| ├─executor.Compile | 10:33:34.647219 | 295.688µs | +| ├─session.runStmt | 10:33:34.647533 | 116.229µs | +| ├─session.CommitTxn | 10:33:34.647631 | 5.44µs | +| ├─recordSet.Next | 10:33:34.647707 | 833.103µs | +| ├─tableReader.Next | 10:33:34.647709 | 806.783µs | +| ├─recordSet.Next | 10:33:34.648572 | 19.367µs | +| └─tableReader.Next | 10:33:34.648575 | 1.783µs | ++---------------------------+-----------------+------------+ +10 rows in set (0.00 sec) + +mysql> CREATE TABLE t1 (id int not null primary key auto_increment); +Query OK, 0 rows affected (0.11 sec) + +mysql> INSERT INTO t1 VALUES (1),(2),(3),(4),(5); +Query OK, 5 rows affected (0.02 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +mysql> TRACE FORMAT='json' SELECT * FROM t1 WHERE id = 2\G +operation: [ + {"ID":{"Trace":"60d20d005593de87","Span":"44e5b309242ffe2f","Parent":"79d146dac9a29a7e"}, + "Annotations":[ + {"Key":"Name","Value":"c2Vzc2lvbi5nZXRUeG5GdXR1cmU="}, + {"Key":"_schema:name","Value":null}, + {"Key":"Span.Start","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE2MTQ3ODYtMDY6MDA="}, + {"Key":"Span.End","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE2MjA0MDYtMDY6MDA="}, + {"Key":"_schema:Timespan","Value":null} + ], + "Sub":[ + {"ID":{"Trace":"60d20d005593de87","Span":"4dbf8f2ca373b4b0","Parent":"79d146dac9a29a7e"}, + "Annotations":[ + {"Key":"Name","Value":"c2Vzc2lvbi5QYXJzZVNRTA=="}, + {"Key":"_schema:name","Value":null}, + {"Key":"Span.Start","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE2NjE1MTQtMDY6MDA="}, + {"Key":"Span.End","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE3MDYxNjgtMDY6MDA="}, + {"Key":"_schema:Timespan","Value":null} + ], + "Sub":null}, + {"ID":{"Trace":"60d20d005593de87","Span":"6b6d6916df809604","Parent":"79d146dac9a29a7e"}, + "Annotations":[ + {"Key":"Name","Value":"ZXhlY3V0b3IuQ29tcGlsZQ=="}, + {"Key":"_schema:name","Value":null}, + {"Key":"Span.End","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE3NTcyODUtMDY6MDA="}, + {"Key":"Span.Start","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE3MzE0MjYtMDY6MDA="}, + {"Key":"_schema:Timespan","Value":null} + ], + "Sub":null}, + {"ID":{"Trace":"60d20d005593de87","Span":"3f1bcdd402a72911","Parent":"79d146dac9a29a7e"}, + "Annotations":[ + {"Key":"Name","Value":"c2Vzc2lvbi5Db21taXRUeG4="}, + {"Key":"_schema:name","Value":null}, + {"Key":"Span.Start","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE3OTgyNjItMDY6MDA="}, + {"Key":"Span.End","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE4MDU1NzYtMDY6MDA="}, + {"Key":"_schema:Timespan","Value":null} + ], + "Sub":null}, + {"ID":{"Trace":"60d20d005593de87","Span":"58c1f7d66dc5afbc","Parent":"79d146dac9a29a7e"}, + "Annotations":[ + {"Key":"Name","Value":"c2Vzc2lvbi5ydW5TdG10"}, + {"Key":"_schema:name","Value":null}, + {"Key":"Msg","Value":"eyJzcWwiOiJTRUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGlkID0gMiJ9"}, + {"Key":"Time","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE3ODA1NjgtMDY6MDA="}, + {"Key":"_schema:log","Value":null}, + {"Key":"Span.End","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE4MTk5MzMtMDY6MDA="}, + {"Key":"Span.Start","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE3NzcyNDItMDY6MDA="}, + {"Key":"_schema:Timespan","Value":null} + ], + "Sub":null}, + {"ID":{"Trace":"60d20d005593de87","Span":"6bd8cc440fb31ed7","Parent":"79d146dac9a29a7e"}, + "Annotations":[ + {"Key":"Name","Value":"c2Vzc2lvbi5FeGVjdXRl"}, + {"Key":"_schema:name","Value":null}, + {"Key":"Span.Start","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE2MTEwODktMDY6MDA="}, + {"Key":"Span.End","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE4NTU0My0wNjowMA=="}, + {"Key":"_schema:Timespan","Value":null} + ], + "Sub":null}, + {"ID":{"Trace":"60d20d005593de87","Span":"61d0b809f6cc018b","Parent":"79d146dac9a29a7e"}, + "Annotations":[ + {"Key":"Name","Value":"cmVjb3JkU2V0Lk5leHQ="}, + {"Key":"_schema:name","Value":null}, + {"Key":"Span.Start","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDE4NzQ1NTYtMDY6MDA="}, + {"Key":"Span.End","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDIyOTg4NjYtMDY6MDA="}, + {"Key":"_schema:Timespan","Value":null} + ], + "Sub":null}, + {"ID":{"Trace":"60d20d005593de87","Span":"2bd2c3d47ccb1133","Parent":"79d146dac9a29a7e"}, + "Annotations":[ + {"Key":"Name","Value":"cmVjb3JkU2V0Lk5leHQ="}, + {"Key":"_schema:name","Value":null}, + {"Key":"Span.Start","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDIzMjY0ODgtMDY6MDA="}, + {"Key":"Span.End","Value":"MjAxOS0wNC0xN1QxMDozOToxMC45NDIzMjkwMDMtMDY6MDA="}, + {"Key":"_schema:Timespan","Value":null} + ], + "Sub":null} + ] + } +] +1 row in set (0.00 sec) +``` + +可将 JSON 格式的跟踪文件粘贴到跟踪查看器中。查看器可通过 TiDB 状态端口访问: + +![TiDB Trace Viewer-1](/media/trace-paste.png) + +![TiDB Trace Viewer-2](/media/trace-view.png) + +## MySQL 兼容性 + +`TRACE` 语句是 TiDB 对 MySQL 语法的扩展。 + +## 另请参阅 + +* [EXPLAIN ANALYZE](/dev/reference/sql/statements/explain-analyze.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/truncate.md b/dev/reference/sql/statements/truncate.md new file mode 100644 index 000000000000..a23f151cfba0 --- /dev/null +++ b/dev/reference/sql/statements/truncate.md @@ -0,0 +1,72 @@ +--- +title: TRUNCATE +summary: TiDB 数据库中 TRUNCATE 的使用概况。 +category: reference +--- + +# TRUNCATE + +`TRUNCATE` 语句以非事务方式从表中删除所有数据。可认为 `TRUNCATE` 语句同 `DROP TABLE` + `CREATE TABLE` 组合在语义上相同,定义与 `DROP TABLE` 语句相同。 + +`TRUNCATE TABLE tableName` 和 `TRUNCATE tableName` 均为有效语法。 + +## 语法图 + +**TruncateTableStmt:** + +![TruncateTableStmt](/media/sqlgram/TruncateTableStmt.png) + +**OptTable:** + +![OptTable](/media/sqlgram/OptTable.png) + +**TableName:** + +![TableName](/media/sqlgram/TableName.png) + +## 示例 + +```sql +mysql> CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY); +Query OK, 0 rows affected (0.11 sec) + +mysql> INSERT INTO t1 VALUES (1),(2),(3),(4),(5); +Query OK, 5 rows affected (0.01 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +mysql> SELECT * FROM t1; ++---+ +| a | ++---+ +| 1 | +| 2 | +| 3 | +| 4 | +| 5 | ++---+ +5 rows in set (0.00 sec) + +mysql> TRUNCATE t1; +Query OK, 0 rows affected (0.11 sec) + +mysql> SELECT * FROM t1; +Empty set (0.00 sec) + +mysql> INSERT INTO t1 VALUES (1),(2),(3),(4),(5); +Query OK, 5 rows affected (0.01 sec) +Records: 5 Duplicates: 0 Warnings: 0 + +mysql> TRUNCATE TABLE t1; +Query OK, 0 rows affected (0.11 sec) +``` + +## MySQL 兼容性 + +`TRUNCATE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [DROP TABLE](/dev/reference/sql/statements/drop-table.md) +* [DELETE](/dev/reference/sql/statements/delete.md) +* [CREATE TABLE](/dev/reference/sql/statements/create-table.md) +* [SHOW CREATE TABLE](/dev/reference/sql/statements/show-create-table.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/update.md b/dev/reference/sql/statements/update.md new file mode 100644 index 000000000000..e424ed612973 --- /dev/null +++ b/dev/reference/sql/statements/update.md @@ -0,0 +1,77 @@ +--- +title: UPDATE +summary: TiDB 数据库中 UPDATE 的使用概况。 +category: reference +--- + +# UPDATE + +`UPDATE` 语句用于修改指定表中的数据。 + +## 语法图 + +**UpdateStmt:** + +![UpdateStmt](/media/sqlgram/UpdateStmt.png) + +**TableRef:** + +![TableRef](/media/sqlgram/TableRef.png) + +**TableRefs:** + +![TableRefs](/media/sqlgram/TableRefs.png) + +**AssignmentList:** + +![AssignmentList](/media/sqlgram/AssignmentList.png) + +**WhereClauseOptional:** + +![WhereClauseOptional](/media/sqlgram/WhereClauseOptional.png) + +## 示例 + +```sql +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); +Query OK, 3 rows affected (0.02 sec) +Records: 3 Duplicates: 0 Warnings: 0 + +mysql> SELECT * FROM t1; ++----+----+ +| id | c1 | ++----+----+ +| 1 | 1 | +| 2 | 2 | +| 3 | 3 | ++----+----+ +3 rows in set (0.00 sec) + +mysql> UPDATE t1 SET c1=5 WHERE c1=3; +Query OK, 1 row affected (0.01 sec) +Rows matched: 1 Changed: 1 Warnings: 0 + +mysql> SELECT * FROM t1; ++----+----+ +| id | c1 | ++----+----+ +| 1 | 1 | +| 2 | 2 | +| 3 | 5 | ++----+----+ +3 rows in set (0.00 sec) +``` + +## MySQL 兼容性 + +`UPDATE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [INSERT](/dev/reference/sql/statements/insert.md) +* [SELECT](/dev/reference/sql/statements/select.md) +* [DELETE](/dev/reference/sql/statements/delete.md) +* [REPLACE](/dev/reference/sql/statements/replace.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/use.md b/dev/reference/sql/statements/use.md new file mode 100644 index 000000000000..e7154f26a3dc --- /dev/null +++ b/dev/reference/sql/statements/use.md @@ -0,0 +1,79 @@ +--- +title: USE +summary: TiDB 数据库中 USE 的使用概况。 +category: reference +--- + +# USE + +`USE` 语句可为用户会话选择当前数据库。 + +## 语法图 + +**UseStmt:** + +![UseStmt](/media/sqlgram/UseStmt.png) + +**DBName:** + +![DBName](/media/sqlgram/DBName.png) + +## 示例 + +```sql +mysql> USE mysql; +Reading table information for completion of table and column names +You can turn off this feature to get a quicker startup with -A + +Database changed +mysql> SHOW TABLES; ++----------------------+ +| Tables_in_mysql | ++----------------------+ +| GLOBAL_VARIABLES | +| bind_info | +| columns_priv | +| db | +| default_roles | +| gc_delete_range | +| gc_delete_range_done | +| help_topic | +| role_edges | +| stats_buckets | +| stats_feedback | +| stats_histograms | +| stats_meta | +| tables_priv | +| tidb | +| user | ++----------------------+ +16 rows in set (0.00 sec) + +mysql> CREATE DATABASE newtest; +Query OK, 0 rows affected (0.10 sec) + +mysql> USE newtest; +Database changed +mysql> SHOW TABLES; +Empty set (0.00 sec) + +mysql> CREATE TABLE t1 (a int); +Query OK, 0 rows affected (0.10 sec) + +mysql> SHOW TABLES; ++-------------------+ +| Tables_in_newtest | ++-------------------+ +| t1 | ++-------------------+ +1 row in set (0.00 sec) +``` + +## MySQL 兼容性 + +`USE` 语句与 MySQL 完全兼容。如有任何兼容性差异,请在 GitHub 上提交 [issue](/dev/report-issue.md)。 + +## 另请参阅 + +* [CREATE DATABASE](/dev/reference/sql/statements/create-database.md) +* [SHOW TABLES](/dev/reference/sql/statements/show-tables.md) \ No newline at end of file diff --git a/dev/reference/sql/statements/util.md b/dev/reference/sql/statements/util.md deleted file mode 100644 index 8648bc83d11e..000000000000 --- a/dev/reference/sql/statements/util.md +++ /dev/null @@ -1,178 +0,0 @@ ---- -title: 实用工具语句 -category: reference -aliases: ['/docs-cn/sql/util/'] ---- - -# 实用工具语句 - -## `DESCRIBE` 语句 - -`DESCRIBE` 和 `EXPLAIN` 是同义词,另外还可以缩写为 `DESC`。请参考 `EXPLAIN` 语句的用法。 - -## `EXPLAIN` 语句 - -```sql -{EXPLAIN | DESCRIBE | DESC} - tbl_name [col_name] - -{EXPLAIN | DESCRIBE | DESC} - [explain_type] - explainable_stmt - -explain_type: - FORMAT = format_name - -format_name: - "DOT" - | "ROW" - -explainable_stmt: { - SELECT statement - | DELETE statement - | INSERT statement - | REPLACE statement - | UPDATE statement -} -``` - -如果不指定 `FORMAT`,或者指定 `FORMAT = "row"`,`EXPLAIN` 语句将以表格形式输出结果。详细信息可参考[理解 TiDB 执行计划](/dev/reference/performance/understanding-the-query-execution-plan.md)章节。 - -除此之外,TiDB 还支持输出 DotGraph 结果,这时需要指定 `FORMAT = "dot"`,示例如下: - -```sql -create table t(a bigint, b bigint); -desc format = "dot" select A.a, B.b from t A join t B on A.a > B.b where A.a < 10; - -TiDB > desc format = "dot" select A.a, B.b from t A join t B on A.a > B.b where A.a < 10;desc format = "dot" select A.a, B.b from t A join t B on A.a > B.b where A.a < 10; -+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| dot contents | -+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| -digraph HashRightJoin_7 { -subgraph cluster7{ -node [style=filled, color=lightgrey] -color=black -label = "root" -"HashRightJoin_7" -> "TableReader_10" -"HashRightJoin_7" -> "TableReader_12" -} -subgraph cluster9{ -node [style=filled, color=lightgrey] -color=black -label = "cop" -"Selection_9" -> "TableScan_8" -} -subgraph cluster11{ -node [style=filled, color=lightgrey] -color=black -label = "cop" -"TableScan_11" -} -"TableReader_10" -> "Selection_9" -"TableReader_12" -> "TableScan_11" -} - | -+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -1 row in set (0.00 sec) -``` - -如果电脑上安装了 `dot` 程序 (包含在 graphviz 软件包中),可以通过如下方式生成 PNG 文件: - -```bash -dot xx.dot -T png -O - -这里的 xx.dot 是上面的语句返回结果。 -``` - -如果没有安装 `dot`,可以将结果拷贝到[这个网站](http://www.webgraphviz.com/),可以得到一个树状图: - -![Explain Dot](/media/explain_dot.png) - -目前 TiDB 中的 `EXPLAIN` 语句暂不支持 MySQL 中 `JSON` 格式的输出。 - -## `USE` 语句 - -```sql -USE db_name -``` - -切换需要使用的 Database 的时候,如果 SQL 语句中的表没有显式指定的 Database,即默认使用当前选定的 Database。 - -## `TRACE` 语句 - -```sql -TRACE [FORMAT = format_name] traceable_stmt - -format_name: - "json" | "row" - -traceable_stmt: { - SELECT statement - | DELETE statement - | INSERT statement - | REPLACE statement - | UPDATE statement -} -``` - -```sql -mysql> trace format = 'row' select * from mysql.user; -+---------------------------|-----------------|------------+ -| operation | startTS | duration | -+---------------------------|-----------------|------------+ -| session.getTxnFuture | 19:54:35.310841 | 4.255µs | -| ├─session.Execute | 19:54:35.310837 | 928.349µs | -| ├─session.ParseSQL | 19:54:35.310906 | 35.379µs | -| ├─executor.Compile | 19:54:35.310972 | 420.688µs | -| ├─session.runStmt | 19:54:35.311427 | 222.431µs | -| ├─session.CommitTxn | 19:54:35.311601 | 14.696µs | -| ├─recordSet.Next | 19:54:35.311828 | 419.797µs | -| ├─tableReader.Next | 19:54:35.311834 | 379.932µs | -| ├─recordSet.Next | 19:54:35.312310 | 26.831µs | -| └─tableReader.Next | 19:54:35.312314 | 2.84µs | -+---------------------------|-----------------|------------+ -10 rows in set (0.00 sec) -``` - -当 format 为 `json` 时,输出是一段 JSON 格式的内容。如果内容过长,则输出会被换行。 - -```sql -mysql> trace format='json' select * from t\G; -*************************** 1. row *************************** -operation: [ - {"ID":{"Trace":"22a6ccdaf58481ea","Span":"4f29711d1db208b4","Parent":"64aa858bd66f5c65"}, - "Annotations":[{"Key":"Name","Value":"c2Vzc2lvbi5nZXRUeG5GdXR1cmU="},{"Key":"_schema:name","Value":null},{"Key":"Span.Start","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDQ5NDc1MTgrMDg6MDA="},{"Key":"Span.End","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDQ5NTI1MDYrMDg6MDA="},{"Key":"_schema:Timespan","Value":null}], - "Sub":[ - {"ID":{"Trace":"22a6ccdaf58481ea","Span":"5a1f3a948a72ff6f","Parent":"64aa858bd66f5c65"}, - "Annotations":[{"Key":"Name","Value":"c2Vzc2lvbi5QYXJzZVNRTA=="},{"Key":"_schema:name","Value":null},{"Key":"Span.Start","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDUwMTc3MzgrMDg6MDA="},{"Key":"Span.End","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDUwNTczNzQrMDg6MDA="},{"Key":"_schema:Timespan","Value":null}], - "Sub":null}, - {"ID":{"Trace":"22a6ccdaf58481ea","Span":"1252ea914624eff1","Parent":"64aa858bd66f5c65"}, - "Annotations":[{"Key":"Name","Value":"ZXhlY3V0b3IuQ29tcGlsZQ=="},{"Key":"_schema:name","Value":null},{"Key":"Span.Start","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDUxMTc3NzQrMDg6MDA="},{"Key":"Span.End","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDUzNzMwNjIrMDg6MDA="},{"Key":"_schema:Timespan","Value":null}], - "Sub":null}, - {"ID":{"Trace":"22a6ccdaf58481ea","Span":"1a32f23071104f0d","Parent":"64aa858bd66f5c65"}, - "Annotations":[{"Key":"Name","Value":"c2Vzc2lvbi5Db21taXRUeG4="},{"Key":"_schema:name","Value":null},{"Key":"Span.Start","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDU1NzIyMTkrMDg6MDA="},{"Key":"Span.End","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDU1ODY4MDIrMDg6MDA="},{"Key":"_schema:Timespan","Value":null}], - "Sub":null}, - {"ID":{"Trace":"22a6ccdaf58481ea","Span":"1a253a1a7e9513ca","Parent":"64aa858bd66f5c65"}, - "Annotations":[{"Key":"Name","Value":"c2Vzc2lvbi5ydW5TdG10"},{"Key":"_schema:name","Value":null},{"Key":"Msg","Value":"eyJzcWwiOiJzZWxlY3QgKiBmcm9tICB0In0="},{"Key":"Time","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDU0MTkxOCswODowMA=="},{"Key":"_schema:log","Value":null},{"Key":"Span.Start","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDU0MTMxMTcrMDg6MDA="},{"Key":"Span.End","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDU2MjE1MjgrMDg6MDA="},{"Key":"_schema:Timespan","Value":null}], - "Sub":null}, - {"ID":{"Trace":"22a6ccdaf58481ea","Span":"0db4399b79ba58c5","Parent":"64aa858bd66f5c65"}, - "Annotations":[{"Key":"Name","Value":"c2Vzc2lvbi5FeGVjdXRl"},{"Key":"_schema:name","Value":null},{"Key":"Span.Start","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDQ5NDI4MSswODowMA=="},{"Key":"Span.End","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDU2OTcwMzcrMDg6MDA="},{"Key":"_schema:Timespan","Value":null}], - "Sub":null}, - {"ID":{"Trace":"22a6ccdaf58481ea","Span":"5fb58dc2f1f6273a","Parent":"64aa858bd66f5c65"}, - "Annotations":[{"Key":"Name","Value":"dGFibGVSZWFkZXIuTmV4dA=="},{"Key":"_schema:name","Value":null},{"Key":"Span.End","Value":"MjAxOS0wMy0yMFQxNjoxMDo1NC4xODIxODMxODIrMDg6MDA="},{"Key":"Span.Start","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDU3NTM5ODYrMDg6MDA="},{"Key":"_schema:Timespan","Value":null}], - "Sub":null}, - {"ID":{"Trace":"22a6ccdaf58481ea","Span":"4c4ceeeeba9bb2eb","Parent":"64aa858bd66f5c65"}, - "Annotations":[{"Key":"Name","Value":"cmVjb3JkU2V0Lk5leHQ="},{"Key":"_schema:name","Value":null},{"Key":"Span.Start","Value":"MjAxOS0wMy0yMFQxNjoxMDo1My4yNDU3NDc0NjMrMDg6MDA="},{"Key":"Span.End","Value":"MjAxOS0wMy0yMFQxNjoxMDo1NC4xODIyMDUyNTUrMDg6MDA="},{"Key":"_schema:Timespan","Value":null}], - "Sub":null}] -}] -1 row in set (0.93 sec) -``` - -输出的 JSON 内容可以在集成的 Web UI 里面查看(默认 10080 端口)。 - -打开 trace viewer 页面,将 `json` 数据填进去: - -![TiDB Trace Viewer-1](/media/tidb-trace-viewer.png) - -![TiDB Trace Viewer-2](/media/tidb-trace-viewer-2.png) diff --git a/dev/reference/tools/data-migration/configure/task-configuration-file.md b/dev/reference/tools/data-migration/configure/task-configuration-file.md index ec62aca52adf..bd8bc67cbea5 100644 --- a/dev/reference/tools/data-migration/configure/task-configuration-file.md +++ b/dev/reference/tools/data-migration/configure/task-configuration-file.md @@ -121,7 +121,7 @@ syncers: # syncer 处理单元运行 max-retry: 100 # syncer 同步到下游数据库出错的事务的重试次数(仅限于 DML 操作)。 ``` -## 实例配置 +## 示例配置 本小节定义具体的数据同步子任务,DM 支持从单个或者多个上游 MySQL 实例同步数据到同一个下游数据库实例。 diff --git a/media/sqlgram/AdminShowSlow.png b/media/sqlgram/AdminShowSlow.png new file mode 100644 index 000000000000..e0063eb00b45 Binary files /dev/null and b/media/sqlgram/AdminShowSlow.png differ diff --git a/media/sqlgram/AdminStmt.png b/media/sqlgram/AdminStmt.png new file mode 100644 index 000000000000..1e375a000f77 Binary files /dev/null and b/media/sqlgram/AdminStmt.png differ diff --git a/media/sqlgram/AlterAlgorithm.png b/media/sqlgram/AlterAlgorithm.png new file mode 100644 index 000000000000..52fa9e1679e7 Binary files /dev/null and b/media/sqlgram/AlterAlgorithm.png differ diff --git a/media/sqlgram/AlterTableOptionListOpt.png b/media/sqlgram/AlterTableOptionListOpt.png new file mode 100644 index 000000000000..3c38b3082fe0 Binary files /dev/null and b/media/sqlgram/AlterTableOptionListOpt.png differ diff --git a/media/sqlgram/AlterTableSpec.png b/media/sqlgram/AlterTableSpec.png new file mode 100644 index 000000000000..5560bb40ef7c Binary files /dev/null and b/media/sqlgram/AlterTableSpec.png differ diff --git a/media/sqlgram/AlterTableStmt.png b/media/sqlgram/AlterTableStmt.png new file mode 100644 index 000000000000..95a9b1e35686 Binary files /dev/null and b/media/sqlgram/AlterTableStmt.png differ diff --git a/media/sqlgram/AlterUserStmt.png b/media/sqlgram/AlterUserStmt.png new file mode 100644 index 000000000000..48334dd68222 Binary files /dev/null and b/media/sqlgram/AlterUserStmt.png differ diff --git a/media/sqlgram/AnalyzeTableStmt.png b/media/sqlgram/AnalyzeTableStmt.png new file mode 100644 index 000000000000..da63ac428402 Binary files /dev/null and b/media/sqlgram/AnalyzeTableStmt.png differ diff --git a/media/sqlgram/AnyOrAll.png b/media/sqlgram/AnyOrAll.png new file mode 100644 index 000000000000..632062355882 Binary files /dev/null and b/media/sqlgram/AnyOrAll.png differ diff --git a/media/sqlgram/AsOpt.png b/media/sqlgram/AsOpt.png new file mode 100644 index 000000000000..c7f4f1227e0d Binary files /dev/null and b/media/sqlgram/AsOpt.png differ diff --git a/media/sqlgram/Assignment.png b/media/sqlgram/Assignment.png new file mode 100644 index 000000000000..3c4ad09cf1c2 Binary files /dev/null and b/media/sqlgram/Assignment.png differ diff --git a/media/sqlgram/AssignmentList.png b/media/sqlgram/AssignmentList.png new file mode 100644 index 000000000000..705000ea2d07 Binary files /dev/null and b/media/sqlgram/AssignmentList.png differ diff --git a/media/sqlgram/AssignmentListOpt.png b/media/sqlgram/AssignmentListOpt.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/AssignmentListOpt.png differ diff --git a/media/sqlgram/AuthOption.png b/media/sqlgram/AuthOption.png new file mode 100644 index 000000000000..4640eaea484c Binary files /dev/null and b/media/sqlgram/AuthOption.png differ diff --git a/media/sqlgram/BeginTransactionStmt.png b/media/sqlgram/BeginTransactionStmt.png new file mode 100644 index 000000000000..1b9e6c371189 Binary files /dev/null and b/media/sqlgram/BeginTransactionStmt.png differ diff --git a/media/sqlgram/BetweenOrNotOp.png b/media/sqlgram/BetweenOrNotOp.png new file mode 100644 index 000000000000..188861a4623b Binary files /dev/null and b/media/sqlgram/BetweenOrNotOp.png differ diff --git a/media/sqlgram/BinlogStmt.png b/media/sqlgram/BinlogStmt.png new file mode 100644 index 000000000000..8a960849e816 Binary files /dev/null and b/media/sqlgram/BinlogStmt.png differ diff --git a/media/sqlgram/BitExpr.png b/media/sqlgram/BitExpr.png new file mode 100644 index 000000000000..6b9b072101f0 Binary files /dev/null and b/media/sqlgram/BitExpr.png differ diff --git a/media/sqlgram/BitValueType.png b/media/sqlgram/BitValueType.png new file mode 100644 index 000000000000..146b1c2d5fb8 Binary files /dev/null and b/media/sqlgram/BitValueType.png differ diff --git a/media/sqlgram/BlobType.png b/media/sqlgram/BlobType.png new file mode 100644 index 000000000000..169ec7922bcb Binary files /dev/null and b/media/sqlgram/BlobType.png differ diff --git a/media/sqlgram/BooleanType.png b/media/sqlgram/BooleanType.png new file mode 100644 index 000000000000..e6c5722e55be Binary files /dev/null and b/media/sqlgram/BooleanType.png differ diff --git a/media/sqlgram/BuggyDefaultFalseDistinctOpt.png b/media/sqlgram/BuggyDefaultFalseDistinctOpt.png new file mode 100644 index 000000000000..8ebe8f52a0a8 Binary files /dev/null and b/media/sqlgram/BuggyDefaultFalseDistinctOpt.png differ diff --git a/media/sqlgram/ByItem.png b/media/sqlgram/ByItem.png new file mode 100644 index 000000000000..3fec9e7443e0 Binary files /dev/null and b/media/sqlgram/ByItem.png differ diff --git a/media/sqlgram/ByList.png b/media/sqlgram/ByList.png new file mode 100644 index 000000000000..88837f1be6d8 Binary files /dev/null and b/media/sqlgram/ByList.png differ diff --git a/media/sqlgram/CastType.png b/media/sqlgram/CastType.png new file mode 100644 index 000000000000..d788d8f03399 Binary files /dev/null and b/media/sqlgram/CastType.png differ diff --git a/media/sqlgram/CharsetKw.png b/media/sqlgram/CharsetKw.png new file mode 100644 index 000000000000..b0a670481a2c Binary files /dev/null and b/media/sqlgram/CharsetKw.png differ diff --git a/media/sqlgram/CharsetName.png b/media/sqlgram/CharsetName.png new file mode 100644 index 000000000000..d8d499bb82c8 Binary files /dev/null and b/media/sqlgram/CharsetName.png differ diff --git a/media/sqlgram/CharsetOpt.png b/media/sqlgram/CharsetOpt.png new file mode 100644 index 000000000000..45dacbeaae62 Binary files /dev/null and b/media/sqlgram/CharsetOpt.png differ diff --git a/media/sqlgram/ColumnDef.png b/media/sqlgram/ColumnDef.png new file mode 100644 index 000000000000..ddf993873c8a Binary files /dev/null and b/media/sqlgram/ColumnDef.png differ diff --git a/media/sqlgram/ColumnKeywordOpt.png b/media/sqlgram/ColumnKeywordOpt.png new file mode 100644 index 000000000000..6466b9726a3e Binary files /dev/null and b/media/sqlgram/ColumnKeywordOpt.png differ diff --git a/media/sqlgram/ColumnName.png b/media/sqlgram/ColumnName.png new file mode 100644 index 000000000000..86fcc2e9f476 Binary files /dev/null and b/media/sqlgram/ColumnName.png differ diff --git a/media/sqlgram/ColumnNameList.png b/media/sqlgram/ColumnNameList.png new file mode 100644 index 000000000000..e19e68a90b5b Binary files /dev/null and b/media/sqlgram/ColumnNameList.png differ diff --git a/media/sqlgram/ColumnNameListOpt.png b/media/sqlgram/ColumnNameListOpt.png new file mode 100644 index 000000000000..2014dd63e70a Binary files /dev/null and b/media/sqlgram/ColumnNameListOpt.png differ diff --git a/media/sqlgram/ColumnNameListOptWithBrackets.png b/media/sqlgram/ColumnNameListOptWithBrackets.png new file mode 100644 index 000000000000..82d83e4929d6 Binary files /dev/null and b/media/sqlgram/ColumnNameListOptWithBrackets.png differ diff --git a/media/sqlgram/ColumnOption.png b/media/sqlgram/ColumnOption.png new file mode 100644 index 000000000000..5dd57820ce54 Binary files /dev/null and b/media/sqlgram/ColumnOption.png differ diff --git a/media/sqlgram/ColumnOptionListOpt.png b/media/sqlgram/ColumnOptionListOpt.png new file mode 100644 index 000000000000..5c31e00c868a Binary files /dev/null and b/media/sqlgram/ColumnOptionListOpt.png differ diff --git a/media/sqlgram/ColumnPosition.png b/media/sqlgram/ColumnPosition.png new file mode 100644 index 000000000000..2dc543e0e8f8 Binary files /dev/null and b/media/sqlgram/ColumnPosition.png differ diff --git a/media/sqlgram/ColumnSetValue.png b/media/sqlgram/ColumnSetValue.png new file mode 100644 index 000000000000..a73716abdaa2 Binary files /dev/null and b/media/sqlgram/ColumnSetValue.png differ diff --git a/media/sqlgram/ColumnSetValueList.png b/media/sqlgram/ColumnSetValueList.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/ColumnSetValueList.png differ diff --git a/media/sqlgram/CommaOpt.png b/media/sqlgram/CommaOpt.png new file mode 100644 index 000000000000..b5f1bbd6cea9 Binary files /dev/null and b/media/sqlgram/CommaOpt.png differ diff --git a/media/sqlgram/CommitStmt.png b/media/sqlgram/CommitStmt.png new file mode 100644 index 000000000000..180ea3a10499 Binary files /dev/null and b/media/sqlgram/CommitStmt.png differ diff --git a/media/sqlgram/CompareOp.png b/media/sqlgram/CompareOp.png new file mode 100644 index 000000000000..3627972dcd13 Binary files /dev/null and b/media/sqlgram/CompareOp.png differ diff --git a/media/sqlgram/Constraint.png b/media/sqlgram/Constraint.png new file mode 100644 index 000000000000..4fd22ba93cb2 Binary files /dev/null and b/media/sqlgram/Constraint.png differ diff --git a/media/sqlgram/ConstraintElem.png b/media/sqlgram/ConstraintElem.png new file mode 100644 index 000000000000..b6f81d0f7308 Binary files /dev/null and b/media/sqlgram/ConstraintElem.png differ diff --git a/media/sqlgram/ConstraintKeywordOpt.png b/media/sqlgram/ConstraintKeywordOpt.png new file mode 100644 index 000000000000..26ea83630964 Binary files /dev/null and b/media/sqlgram/ConstraintKeywordOpt.png differ diff --git a/media/sqlgram/CreateBindingStmt.png b/media/sqlgram/CreateBindingStmt.png new file mode 100644 index 000000000000..880d909f49ac Binary files /dev/null and b/media/sqlgram/CreateBindingStmt.png differ diff --git a/media/sqlgram/CreateDatabaseStmt.png b/media/sqlgram/CreateDatabaseStmt.png new file mode 100644 index 000000000000..240bd250f569 Binary files /dev/null and b/media/sqlgram/CreateDatabaseStmt.png differ diff --git a/media/sqlgram/CreateIndexStmt.png b/media/sqlgram/CreateIndexStmt.png new file mode 100644 index 000000000000..ae7145675d60 Binary files /dev/null and b/media/sqlgram/CreateIndexStmt.png differ diff --git a/media/sqlgram/CreateIndexStmtUnique.png b/media/sqlgram/CreateIndexStmtUnique.png new file mode 100644 index 000000000000..0e408c1fe207 Binary files /dev/null and b/media/sqlgram/CreateIndexStmtUnique.png differ diff --git a/media/sqlgram/CreateTableOptionListOpt.png b/media/sqlgram/CreateTableOptionListOpt.png new file mode 100644 index 000000000000..3c38b3082fe0 Binary files /dev/null and b/media/sqlgram/CreateTableOptionListOpt.png differ diff --git a/media/sqlgram/CreateTableSelectOpt.png b/media/sqlgram/CreateTableSelectOpt.png new file mode 100644 index 000000000000..ede7d1311f56 Binary files /dev/null and b/media/sqlgram/CreateTableSelectOpt.png differ diff --git a/media/sqlgram/CreateTableStmt.png b/media/sqlgram/CreateTableStmt.png new file mode 100644 index 000000000000..ef749e2381ba Binary files /dev/null and b/media/sqlgram/CreateTableStmt.png differ diff --git a/media/sqlgram/CreateUserStmt.png b/media/sqlgram/CreateUserStmt.png new file mode 100644 index 000000000000..ae181e58f2a6 Binary files /dev/null and b/media/sqlgram/CreateUserStmt.png differ diff --git a/media/sqlgram/CreateViewStmt.png b/media/sqlgram/CreateViewStmt.png new file mode 100644 index 000000000000..84feef35db27 Binary files /dev/null and b/media/sqlgram/CreateViewStmt.png differ diff --git a/media/sqlgram/CrossOpt.png b/media/sqlgram/CrossOpt.png new file mode 100644 index 000000000000..2b8922b3ecdf Binary files /dev/null and b/media/sqlgram/CrossOpt.png differ diff --git a/media/sqlgram/DBName.png b/media/sqlgram/DBName.png new file mode 100644 index 000000000000..065f275b7be4 Binary files /dev/null and b/media/sqlgram/DBName.png differ diff --git a/media/sqlgram/DatabaseOption.png b/media/sqlgram/DatabaseOption.png new file mode 100644 index 000000000000..d91e3a82d700 Binary files /dev/null and b/media/sqlgram/DatabaseOption.png differ diff --git a/media/sqlgram/DatabaseOptionListOpt.png b/media/sqlgram/DatabaseOptionListOpt.png new file mode 100644 index 000000000000..3c73525b76cf Binary files /dev/null and b/media/sqlgram/DatabaseOptionListOpt.png differ diff --git a/media/sqlgram/DatabaseSym.png b/media/sqlgram/DatabaseSym.png new file mode 100644 index 000000000000..7e74caffe288 Binary files /dev/null and b/media/sqlgram/DatabaseSym.png differ diff --git a/media/sqlgram/DateAndTimeType.png b/media/sqlgram/DateAndTimeType.png new file mode 100644 index 000000000000..57ef5ac8e5db Binary files /dev/null and b/media/sqlgram/DateAndTimeType.png differ diff --git a/media/sqlgram/DateArithInterval.png b/media/sqlgram/DateArithInterval.png new file mode 100644 index 000000000000..4445f622bba1 Binary files /dev/null and b/media/sqlgram/DateArithInterval.png differ diff --git a/media/sqlgram/DateArithMultiFormsOpt.png b/media/sqlgram/DateArithMultiFormsOpt.png new file mode 100644 index 000000000000..2908bcef0872 Binary files /dev/null and b/media/sqlgram/DateArithMultiFormsOpt.png differ diff --git a/media/sqlgram/DateArithOpt.png b/media/sqlgram/DateArithOpt.png new file mode 100644 index 000000000000..3632a16a5326 Binary files /dev/null and b/media/sqlgram/DateArithOpt.png differ diff --git a/media/sqlgram/DeallocateStmt.png b/media/sqlgram/DeallocateStmt.png new file mode 100644 index 000000000000..a381eea0666d Binary files /dev/null and b/media/sqlgram/DeallocateStmt.png differ diff --git a/media/sqlgram/DeallocateSym.png b/media/sqlgram/DeallocateSym.png new file mode 100644 index 000000000000..e134763d93fc Binary files /dev/null and b/media/sqlgram/DeallocateSym.png differ diff --git a/media/sqlgram/DefaultFalseDistinctOpt.png b/media/sqlgram/DefaultFalseDistinctOpt.png new file mode 100644 index 000000000000..7fa6c1e26914 Binary files /dev/null and b/media/sqlgram/DefaultFalseDistinctOpt.png differ diff --git a/media/sqlgram/DefaultKwdOpt.png b/media/sqlgram/DefaultKwdOpt.png new file mode 100644 index 000000000000..78f7647cb0ac Binary files /dev/null and b/media/sqlgram/DefaultKwdOpt.png differ diff --git a/media/sqlgram/DefaultTrueDistinctOpt.png b/media/sqlgram/DefaultTrueDistinctOpt.png new file mode 100644 index 000000000000..7fa6c1e26914 Binary files /dev/null and b/media/sqlgram/DefaultTrueDistinctOpt.png differ diff --git a/media/sqlgram/DefaultValueExpr.png b/media/sqlgram/DefaultValueExpr.png new file mode 100644 index 000000000000..0cd8821fde6a Binary files /dev/null and b/media/sqlgram/DefaultValueExpr.png differ diff --git a/media/sqlgram/DeleteFromStmt.png b/media/sqlgram/DeleteFromStmt.png new file mode 100644 index 000000000000..7187e89eaaff Binary files /dev/null and b/media/sqlgram/DeleteFromStmt.png differ diff --git a/media/sqlgram/DistinctKwd.png b/media/sqlgram/DistinctKwd.png new file mode 100644 index 000000000000..4a341f918504 Binary files /dev/null and b/media/sqlgram/DistinctKwd.png differ diff --git a/media/sqlgram/DistinctOpt.png b/media/sqlgram/DistinctOpt.png new file mode 100644 index 000000000000..da75ba4eb6d2 Binary files /dev/null and b/media/sqlgram/DistinctOpt.png differ diff --git a/media/sqlgram/DoStmt.png b/media/sqlgram/DoStmt.png new file mode 100644 index 000000000000..993bde6661dd Binary files /dev/null and b/media/sqlgram/DoStmt.png differ diff --git a/media/sqlgram/DropBindingStmt.png b/media/sqlgram/DropBindingStmt.png new file mode 100644 index 000000000000..151cd92a89ae Binary files /dev/null and b/media/sqlgram/DropBindingStmt.png differ diff --git a/media/sqlgram/DropDatabaseStmt.png b/media/sqlgram/DropDatabaseStmt.png new file mode 100644 index 000000000000..099659768005 Binary files /dev/null and b/media/sqlgram/DropDatabaseStmt.png differ diff --git a/media/sqlgram/DropIndexStmt.png b/media/sqlgram/DropIndexStmt.png new file mode 100644 index 000000000000..8005a0b04d5b Binary files /dev/null and b/media/sqlgram/DropIndexStmt.png differ diff --git a/media/sqlgram/DropStatsStmt.png b/media/sqlgram/DropStatsStmt.png new file mode 100644 index 000000000000..fc605803d186 Binary files /dev/null and b/media/sqlgram/DropStatsStmt.png differ diff --git a/media/sqlgram/DropTableStmt.png b/media/sqlgram/DropTableStmt.png new file mode 100644 index 000000000000..fa4bb82d4fc6 Binary files /dev/null and b/media/sqlgram/DropTableStmt.png differ diff --git a/media/sqlgram/DropUserStmt.png b/media/sqlgram/DropUserStmt.png new file mode 100644 index 000000000000..27427cfe37ca Binary files /dev/null and b/media/sqlgram/DropUserStmt.png differ diff --git a/media/sqlgram/DropViewStmt.png b/media/sqlgram/DropViewStmt.png new file mode 100644 index 000000000000..c47b8d5180e2 Binary files /dev/null and b/media/sqlgram/DropViewStmt.png differ diff --git a/media/sqlgram/DuplicateOpt.png b/media/sqlgram/DuplicateOpt.png new file mode 100644 index 000000000000..55a7952e71ae Binary files /dev/null and b/media/sqlgram/DuplicateOpt.png differ diff --git a/media/sqlgram/ElseOpt.png b/media/sqlgram/ElseOpt.png new file mode 100644 index 000000000000..6da79a965822 Binary files /dev/null and b/media/sqlgram/ElseOpt.png differ diff --git a/media/sqlgram/EmptyStmt.png b/media/sqlgram/EmptyStmt.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/EmptyStmt.png differ diff --git a/media/sqlgram/Enclosed.png b/media/sqlgram/Enclosed.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/Enclosed.png differ diff --git a/media/sqlgram/EqOpt.png b/media/sqlgram/EqOpt.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/EqOpt.png differ diff --git a/media/sqlgram/Escaped.png b/media/sqlgram/Escaped.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/Escaped.png differ diff --git a/media/sqlgram/EscapedTableRef.png b/media/sqlgram/EscapedTableRef.png new file mode 100644 index 000000000000..52e2756fd340 Binary files /dev/null and b/media/sqlgram/EscapedTableRef.png differ diff --git a/media/sqlgram/ExecuteStmt.png b/media/sqlgram/ExecuteStmt.png new file mode 100644 index 000000000000..6ddbf0cacc0e Binary files /dev/null and b/media/sqlgram/ExecuteStmt.png differ diff --git a/media/sqlgram/ExplainStmt.png b/media/sqlgram/ExplainStmt.png new file mode 100644 index 000000000000..b76b1f50a319 Binary files /dev/null and b/media/sqlgram/ExplainStmt.png differ diff --git a/media/sqlgram/ExplainSym.png b/media/sqlgram/ExplainSym.png new file mode 100644 index 000000000000..200531f14973 Binary files /dev/null and b/media/sqlgram/ExplainSym.png differ diff --git a/media/sqlgram/ExplainableStmt.png b/media/sqlgram/ExplainableStmt.png new file mode 100644 index 000000000000..bddac1e18228 Binary files /dev/null and b/media/sqlgram/ExplainableStmt.png differ diff --git a/media/sqlgram/ExprOrDefault.png b/media/sqlgram/ExprOrDefault.png new file mode 100644 index 000000000000..83398cad99a5 Binary files /dev/null and b/media/sqlgram/ExprOrDefault.png differ diff --git a/media/sqlgram/Expression.png b/media/sqlgram/Expression.png new file mode 100644 index 000000000000..4e00324dcdcf Binary files /dev/null and b/media/sqlgram/Expression.png differ diff --git a/media/sqlgram/ExpressionList.png b/media/sqlgram/ExpressionList.png new file mode 100644 index 000000000000..0eebf99f7206 Binary files /dev/null and b/media/sqlgram/ExpressionList.png differ diff --git a/media/sqlgram/ExpressionListListItem.png b/media/sqlgram/ExpressionListListItem.png new file mode 100644 index 000000000000..40d5ac38f0f9 Binary files /dev/null and b/media/sqlgram/ExpressionListListItem.png differ diff --git a/media/sqlgram/ExpressionListOpt.png b/media/sqlgram/ExpressionListOpt.png new file mode 100644 index 000000000000..ebd0285c68db Binary files /dev/null and b/media/sqlgram/ExpressionListOpt.png differ diff --git a/media/sqlgram/ExpressionOpt.png b/media/sqlgram/ExpressionOpt.png new file mode 100644 index 000000000000..bf7fb8eec393 Binary files /dev/null and b/media/sqlgram/ExpressionOpt.png differ diff --git a/media/sqlgram/Field.png b/media/sqlgram/Field.png new file mode 100644 index 000000000000..91934f5fe064 Binary files /dev/null and b/media/sqlgram/Field.png differ diff --git a/media/sqlgram/FieldAsName.png b/media/sqlgram/FieldAsName.png new file mode 100644 index 000000000000..67d680e13352 Binary files /dev/null and b/media/sqlgram/FieldAsName.png differ diff --git a/media/sqlgram/FieldAsNameOpt.png b/media/sqlgram/FieldAsNameOpt.png new file mode 100644 index 000000000000..07df86782a74 Binary files /dev/null and b/media/sqlgram/FieldAsNameOpt.png differ diff --git a/media/sqlgram/FieldLen.png b/media/sqlgram/FieldLen.png new file mode 100644 index 000000000000..26086e832c5c Binary files /dev/null and b/media/sqlgram/FieldLen.png differ diff --git a/media/sqlgram/FieldOpt.png b/media/sqlgram/FieldOpt.png new file mode 100644 index 000000000000..72f6004e98e3 Binary files /dev/null and b/media/sqlgram/FieldOpt.png differ diff --git a/media/sqlgram/FieldOpts.png b/media/sqlgram/FieldOpts.png new file mode 100644 index 000000000000..e96900f57897 Binary files /dev/null and b/media/sqlgram/FieldOpts.png differ diff --git a/media/sqlgram/Fields.png b/media/sqlgram/Fields.png new file mode 100644 index 000000000000..d3c7a2497b19 Binary files /dev/null and b/media/sqlgram/Fields.png differ diff --git a/media/sqlgram/FieldsOrColumns.png b/media/sqlgram/FieldsOrColumns.png new file mode 100644 index 000000000000..38d61f912f88 Binary files /dev/null and b/media/sqlgram/FieldsOrColumns.png differ diff --git a/media/sqlgram/FieldsTerminated.png b/media/sqlgram/FieldsTerminated.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/FieldsTerminated.png differ diff --git a/media/sqlgram/FixedPointType.png b/media/sqlgram/FixedPointType.png new file mode 100644 index 000000000000..521b7baf92f9 Binary files /dev/null and b/media/sqlgram/FixedPointType.png differ diff --git a/media/sqlgram/FloatOpt.png b/media/sqlgram/FloatOpt.png new file mode 100644 index 000000000000..f0dfa0222495 Binary files /dev/null and b/media/sqlgram/FloatOpt.png differ diff --git a/media/sqlgram/FloatingPointType.png b/media/sqlgram/FloatingPointType.png new file mode 100644 index 000000000000..af723847c39b Binary files /dev/null and b/media/sqlgram/FloatingPointType.png differ diff --git a/media/sqlgram/FlushOption.png b/media/sqlgram/FlushOption.png new file mode 100644 index 000000000000..beeccfd23542 Binary files /dev/null and b/media/sqlgram/FlushOption.png differ diff --git a/media/sqlgram/FlushStmt.png b/media/sqlgram/FlushStmt.png new file mode 100644 index 000000000000..98b182fe3eb9 Binary files /dev/null and b/media/sqlgram/FlushStmt.png differ diff --git a/media/sqlgram/FromDual.png b/media/sqlgram/FromDual.png new file mode 100644 index 000000000000..7fabe7be9854 Binary files /dev/null and b/media/sqlgram/FromDual.png differ diff --git a/media/sqlgram/FromOrIn.png b/media/sqlgram/FromOrIn.png new file mode 100644 index 000000000000..82e06a36b625 Binary files /dev/null and b/media/sqlgram/FromOrIn.png differ diff --git a/media/sqlgram/FuncDatetimePrec.png b/media/sqlgram/FuncDatetimePrec.png new file mode 100644 index 000000000000..fa5dda98229c Binary files /dev/null and b/media/sqlgram/FuncDatetimePrec.png differ diff --git a/media/sqlgram/FuncDatetimePrecListOpt.png b/media/sqlgram/FuncDatetimePrecListOpt.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/FuncDatetimePrecListOpt.png differ diff --git a/media/sqlgram/Function.png b/media/sqlgram/Function.png new file mode 100644 index 000000000000..8960fa7586e0 Binary files /dev/null and b/media/sqlgram/Function.png differ diff --git a/media/sqlgram/FunctionCallAgg.png b/media/sqlgram/FunctionCallAgg.png new file mode 100644 index 000000000000..ab9f9446c30f Binary files /dev/null and b/media/sqlgram/FunctionCallAgg.png differ diff --git a/media/sqlgram/FunctionCallConflict.png b/media/sqlgram/FunctionCallConflict.png new file mode 100644 index 000000000000..37112d69026a Binary files /dev/null and b/media/sqlgram/FunctionCallConflict.png differ diff --git a/media/sqlgram/FunctionCallKeyword.png b/media/sqlgram/FunctionCallKeyword.png new file mode 100644 index 000000000000..402242b627db Binary files /dev/null and b/media/sqlgram/FunctionCallKeyword.png differ diff --git a/media/sqlgram/FunctionCallNonKeyword.png b/media/sqlgram/FunctionCallNonKeyword.png new file mode 100644 index 000000000000..d94fdee067ea Binary files /dev/null and b/media/sqlgram/FunctionCallNonKeyword.png differ diff --git a/media/sqlgram/FunctionNameConflict.png b/media/sqlgram/FunctionNameConflict.png new file mode 100644 index 000000000000..2ed740ad152a Binary files /dev/null and b/media/sqlgram/FunctionNameConflict.png differ diff --git a/media/sqlgram/FunctionNameDatetimePrecision.png b/media/sqlgram/FunctionNameDatetimePrecision.png new file mode 100644 index 000000000000..6c42fdf8a408 Binary files /dev/null and b/media/sqlgram/FunctionNameDatetimePrecision.png differ diff --git a/media/sqlgram/FunctionNameOptionalBraces.png b/media/sqlgram/FunctionNameOptionalBraces.png new file mode 100644 index 000000000000..b3aa68bd0652 Binary files /dev/null and b/media/sqlgram/FunctionNameOptionalBraces.png differ diff --git a/media/sqlgram/GeneratedAlways.png b/media/sqlgram/GeneratedAlways.png new file mode 100644 index 000000000000..8d87e83cf7df Binary files /dev/null and b/media/sqlgram/GeneratedAlways.png differ diff --git a/media/sqlgram/GetFormatSelector.png b/media/sqlgram/GetFormatSelector.png new file mode 100644 index 000000000000..ad385bde3324 Binary files /dev/null and b/media/sqlgram/GetFormatSelector.png differ diff --git a/media/sqlgram/GlobalScope.png b/media/sqlgram/GlobalScope.png new file mode 100644 index 000000000000..f5f7dbd2496a Binary files /dev/null and b/media/sqlgram/GlobalScope.png differ diff --git a/media/sqlgram/GrantStmt.png b/media/sqlgram/GrantStmt.png new file mode 100644 index 000000000000..ac8bc76a9107 Binary files /dev/null and b/media/sqlgram/GrantStmt.png differ diff --git a/media/sqlgram/GroupByClause.png b/media/sqlgram/GroupByClause.png new file mode 100644 index 000000000000..289893da6a63 Binary files /dev/null and b/media/sqlgram/GroupByClause.png differ diff --git a/media/sqlgram/HandleRange.png b/media/sqlgram/HandleRange.png new file mode 100644 index 000000000000..a71a2bfdee4c Binary files /dev/null and b/media/sqlgram/HandleRange.png differ diff --git a/media/sqlgram/HavingClause.png b/media/sqlgram/HavingClause.png new file mode 100644 index 000000000000..0a4e521712d6 Binary files /dev/null and b/media/sqlgram/HavingClause.png differ diff --git a/media/sqlgram/HintTableList.png b/media/sqlgram/HintTableList.png new file mode 100644 index 000000000000..4158610f7881 Binary files /dev/null and b/media/sqlgram/HintTableList.png differ diff --git a/media/sqlgram/Identifier.png b/media/sqlgram/Identifier.png new file mode 100644 index 000000000000..c021b2d3fb3a Binary files /dev/null and b/media/sqlgram/Identifier.png differ diff --git a/media/sqlgram/IfExists.png b/media/sqlgram/IfExists.png new file mode 100644 index 000000000000..cf5ca4d5cd07 Binary files /dev/null and b/media/sqlgram/IfExists.png differ diff --git a/media/sqlgram/IfNotExists.png b/media/sqlgram/IfNotExists.png new file mode 100644 index 000000000000..363cf2bbe865 Binary files /dev/null and b/media/sqlgram/IfNotExists.png differ diff --git a/media/sqlgram/IgnoreLines.png b/media/sqlgram/IgnoreLines.png new file mode 100644 index 000000000000..59c3757d8be8 Binary files /dev/null and b/media/sqlgram/IgnoreLines.png differ diff --git a/media/sqlgram/IgnoreOptional.png b/media/sqlgram/IgnoreOptional.png new file mode 100644 index 000000000000..f3b4f0045a8c Binary files /dev/null and b/media/sqlgram/IgnoreOptional.png differ diff --git a/media/sqlgram/InOrNotOp.png b/media/sqlgram/InOrNotOp.png new file mode 100644 index 000000000000..f702fb70fa14 Binary files /dev/null and b/media/sqlgram/InOrNotOp.png differ diff --git a/media/sqlgram/IndexColName.png b/media/sqlgram/IndexColName.png new file mode 100644 index 000000000000..9554b3b1c84f Binary files /dev/null and b/media/sqlgram/IndexColName.png differ diff --git a/media/sqlgram/IndexColNameList.png b/media/sqlgram/IndexColNameList.png new file mode 100644 index 000000000000..9a9b04812729 Binary files /dev/null and b/media/sqlgram/IndexColNameList.png differ diff --git a/media/sqlgram/IndexHint.png b/media/sqlgram/IndexHint.png new file mode 100644 index 000000000000..9f7bc267999f Binary files /dev/null and b/media/sqlgram/IndexHint.png differ diff --git a/media/sqlgram/IndexHintListOpt.png b/media/sqlgram/IndexHintListOpt.png new file mode 100644 index 000000000000..4cb5aedc4dc7 Binary files /dev/null and b/media/sqlgram/IndexHintListOpt.png differ diff --git a/media/sqlgram/IndexHintScope.png b/media/sqlgram/IndexHintScope.png new file mode 100644 index 000000000000..bb78cae45589 Binary files /dev/null and b/media/sqlgram/IndexHintScope.png differ diff --git a/media/sqlgram/IndexHintType.png b/media/sqlgram/IndexHintType.png new file mode 100644 index 000000000000..f0f26ab7033e Binary files /dev/null and b/media/sqlgram/IndexHintType.png differ diff --git a/media/sqlgram/IndexName.png b/media/sqlgram/IndexName.png new file mode 100644 index 000000000000..01affb7e7711 Binary files /dev/null and b/media/sqlgram/IndexName.png differ diff --git a/media/sqlgram/IndexNameList.png b/media/sqlgram/IndexNameList.png new file mode 100644 index 000000000000..2946fe801ce0 Binary files /dev/null and b/media/sqlgram/IndexNameList.png differ diff --git a/media/sqlgram/IndexOption.png b/media/sqlgram/IndexOption.png new file mode 100644 index 000000000000..15623c3ab0ff Binary files /dev/null and b/media/sqlgram/IndexOption.png differ diff --git a/media/sqlgram/IndexOptionList.png b/media/sqlgram/IndexOptionList.png new file mode 100644 index 000000000000..fb5d448e94cd Binary files /dev/null and b/media/sqlgram/IndexOptionList.png differ diff --git a/media/sqlgram/IndexType.png b/media/sqlgram/IndexType.png new file mode 100644 index 000000000000..8e090d25e5bd Binary files /dev/null and b/media/sqlgram/IndexType.png differ diff --git a/media/sqlgram/IndexTypeOpt.png b/media/sqlgram/IndexTypeOpt.png new file mode 100644 index 000000000000..5345a1ed32d8 Binary files /dev/null and b/media/sqlgram/IndexTypeOpt.png differ diff --git a/media/sqlgram/InsertIntoStmt.png b/media/sqlgram/InsertIntoStmt.png new file mode 100644 index 000000000000..f0bab97cf0a7 Binary files /dev/null and b/media/sqlgram/InsertIntoStmt.png differ diff --git a/media/sqlgram/InsertValues.png b/media/sqlgram/InsertValues.png new file mode 100644 index 000000000000..9b6f90247ffe Binary files /dev/null and b/media/sqlgram/InsertValues.png differ diff --git a/media/sqlgram/IntegerType.png b/media/sqlgram/IntegerType.png new file mode 100644 index 000000000000..9378e28583ce Binary files /dev/null and b/media/sqlgram/IntegerType.png differ diff --git a/media/sqlgram/IntoOpt.png b/media/sqlgram/IntoOpt.png new file mode 100644 index 000000000000..18f3a0fd1211 Binary files /dev/null and b/media/sqlgram/IntoOpt.png differ diff --git a/media/sqlgram/IsOrNotOp.png b/media/sqlgram/IsOrNotOp.png new file mode 100644 index 000000000000..bdebee044839 Binary files /dev/null and b/media/sqlgram/IsOrNotOp.png differ diff --git a/media/sqlgram/IsolationLevel.png b/media/sqlgram/IsolationLevel.png new file mode 100644 index 000000000000..e4143e2ce6d1 Binary files /dev/null and b/media/sqlgram/IsolationLevel.png differ diff --git a/media/sqlgram/JoinTable.png b/media/sqlgram/JoinTable.png new file mode 100644 index 000000000000..794086e52634 Binary files /dev/null and b/media/sqlgram/JoinTable.png differ diff --git a/media/sqlgram/JoinType.png b/media/sqlgram/JoinType.png new file mode 100644 index 000000000000..90330a1efc7e Binary files /dev/null and b/media/sqlgram/JoinType.png differ diff --git a/media/sqlgram/KeyOrIndex.png b/media/sqlgram/KeyOrIndex.png new file mode 100644 index 000000000000..387f9cd1b993 Binary files /dev/null and b/media/sqlgram/KeyOrIndex.png differ diff --git a/media/sqlgram/KeyOrIndexOpt.png b/media/sqlgram/KeyOrIndexOpt.png new file mode 100644 index 000000000000..a51a5b28c62f Binary files /dev/null and b/media/sqlgram/KeyOrIndexOpt.png differ diff --git a/media/sqlgram/KillOrKillTiDB.png b/media/sqlgram/KillOrKillTiDB.png new file mode 100644 index 000000000000..deb97d683fe2 Binary files /dev/null and b/media/sqlgram/KillOrKillTiDB.png differ diff --git a/media/sqlgram/KillStmt.png b/media/sqlgram/KillStmt.png new file mode 100644 index 000000000000..9f2a6e91fe90 Binary files /dev/null and b/media/sqlgram/KillStmt.png differ diff --git a/media/sqlgram/LengthNum.png b/media/sqlgram/LengthNum.png new file mode 100644 index 000000000000..d98daaa364eb Binary files /dev/null and b/media/sqlgram/LengthNum.png differ diff --git a/media/sqlgram/LikeEscapeOpt.png b/media/sqlgram/LikeEscapeOpt.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/LikeEscapeOpt.png differ diff --git a/media/sqlgram/LikeOrNotOp.png b/media/sqlgram/LikeOrNotOp.png new file mode 100644 index 000000000000..62830897fc92 Binary files /dev/null and b/media/sqlgram/LikeOrNotOp.png differ diff --git a/media/sqlgram/LikeTableWithOrWithoutParen.png b/media/sqlgram/LikeTableWithOrWithoutParen.png new file mode 100644 index 000000000000..0d83ef47bf74 Binary files /dev/null and b/media/sqlgram/LikeTableWithOrWithoutParen.png differ diff --git a/media/sqlgram/LimitClause.png b/media/sqlgram/LimitClause.png new file mode 100644 index 000000000000..3e4565047f85 Binary files /dev/null and b/media/sqlgram/LimitClause.png differ diff --git a/media/sqlgram/LimitOption.png b/media/sqlgram/LimitOption.png new file mode 100644 index 000000000000..7ed6c8e173e7 Binary files /dev/null and b/media/sqlgram/LimitOption.png differ diff --git a/media/sqlgram/Lines.png b/media/sqlgram/Lines.png new file mode 100644 index 000000000000..5cd146534e24 Binary files /dev/null and b/media/sqlgram/Lines.png differ diff --git a/media/sqlgram/LinesTerminated.png b/media/sqlgram/LinesTerminated.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/LinesTerminated.png differ diff --git a/media/sqlgram/Literal.png b/media/sqlgram/Literal.png new file mode 100644 index 000000000000..635c84b6d1e4 Binary files /dev/null and b/media/sqlgram/Literal.png differ diff --git a/media/sqlgram/LoadDataStmt.png b/media/sqlgram/LoadDataStmt.png new file mode 100644 index 000000000000..054dd1d59178 Binary files /dev/null and b/media/sqlgram/LoadDataStmt.png differ diff --git a/media/sqlgram/LocalOpt.png b/media/sqlgram/LocalOpt.png new file mode 100644 index 000000000000..2f03ab2c3369 Binary files /dev/null and b/media/sqlgram/LocalOpt.png differ diff --git a/media/sqlgram/LockClauseOpt.png b/media/sqlgram/LockClauseOpt.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/LockClauseOpt.png differ diff --git a/media/sqlgram/LockTablesStmt.png b/media/sqlgram/LockTablesStmt.png new file mode 100644 index 000000000000..d25b3d30f13f Binary files /dev/null and b/media/sqlgram/LockTablesStmt.png differ diff --git a/media/sqlgram/LockType.png b/media/sqlgram/LockType.png new file mode 100644 index 000000000000..5153b805240c Binary files /dev/null and b/media/sqlgram/LockType.png differ diff --git a/media/sqlgram/LowPriorityOptional.png b/media/sqlgram/LowPriorityOptional.png new file mode 100644 index 000000000000..5595335436a3 Binary files /dev/null and b/media/sqlgram/LowPriorityOptional.png differ diff --git a/media/sqlgram/MaxNumBuckets.png b/media/sqlgram/MaxNumBuckets.png new file mode 100644 index 000000000000..9887cbdd7710 Binary files /dev/null and b/media/sqlgram/MaxNumBuckets.png differ diff --git a/media/sqlgram/MaxValueOrExpression.png b/media/sqlgram/MaxValueOrExpression.png new file mode 100644 index 000000000000..ffa4c231db67 Binary files /dev/null and b/media/sqlgram/MaxValueOrExpression.png differ diff --git a/media/sqlgram/NationalOpt.png b/media/sqlgram/NationalOpt.png new file mode 100644 index 000000000000..253032ae0cc6 Binary files /dev/null and b/media/sqlgram/NationalOpt.png differ diff --git a/media/sqlgram/NoWriteToBinLogAliasOpt.png b/media/sqlgram/NoWriteToBinLogAliasOpt.png new file mode 100644 index 000000000000..3ca9bbf42f9b Binary files /dev/null and b/media/sqlgram/NoWriteToBinLogAliasOpt.png differ diff --git a/media/sqlgram/NotKeywordToken.png b/media/sqlgram/NotKeywordToken.png new file mode 100644 index 000000000000..c02b1a02cca4 Binary files /dev/null and b/media/sqlgram/NotKeywordToken.png differ diff --git a/media/sqlgram/NotOpt.png b/media/sqlgram/NotOpt.png new file mode 100644 index 000000000000..e87b8cc7f5c7 Binary files /dev/null and b/media/sqlgram/NotOpt.png differ diff --git a/media/sqlgram/NowSym.png b/media/sqlgram/NowSym.png new file mode 100644 index 000000000000..ed66d7cdf36a Binary files /dev/null and b/media/sqlgram/NowSym.png differ diff --git a/media/sqlgram/NowSymFunc.png b/media/sqlgram/NowSymFunc.png new file mode 100644 index 000000000000..ed66d7cdf36a Binary files /dev/null and b/media/sqlgram/NowSymFunc.png differ diff --git a/media/sqlgram/NowSymOptionFraction.png b/media/sqlgram/NowSymOptionFraction.png new file mode 100644 index 000000000000..1a158a099db9 Binary files /dev/null and b/media/sqlgram/NowSymOptionFraction.png differ diff --git a/media/sqlgram/NumList.png b/media/sqlgram/NumList.png new file mode 100644 index 000000000000..11683d4a64ff Binary files /dev/null and b/media/sqlgram/NumList.png differ diff --git a/media/sqlgram/NumLiteral.png b/media/sqlgram/NumLiteral.png new file mode 100644 index 000000000000..8701d3550ce5 Binary files /dev/null and b/media/sqlgram/NumLiteral.png differ diff --git a/media/sqlgram/NumericType.png b/media/sqlgram/NumericType.png new file mode 100644 index 000000000000..67e1eb910b26 Binary files /dev/null and b/media/sqlgram/NumericType.png differ diff --git a/media/sqlgram/ObjectType.png b/media/sqlgram/ObjectType.png new file mode 100644 index 000000000000..40ed08c122c3 Binary files /dev/null and b/media/sqlgram/ObjectType.png differ diff --git a/media/sqlgram/OnDeleteOpt.png b/media/sqlgram/OnDeleteOpt.png new file mode 100644 index 000000000000..8a1f6ba92471 Binary files /dev/null and b/media/sqlgram/OnDeleteOpt.png differ diff --git a/media/sqlgram/OnDuplicateKeyUpdate.png b/media/sqlgram/OnDuplicateKeyUpdate.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/OnDuplicateKeyUpdate.png differ diff --git a/media/sqlgram/OnUpdateOpt.png b/media/sqlgram/OnUpdateOpt.png new file mode 100644 index 000000000000..d099cc3846a1 Binary files /dev/null and b/media/sqlgram/OnUpdateOpt.png differ diff --git a/media/sqlgram/Operand.png b/media/sqlgram/Operand.png new file mode 100644 index 000000000000..87e4ce649a63 Binary files /dev/null and b/media/sqlgram/Operand.png differ diff --git a/media/sqlgram/OptBinMod.png b/media/sqlgram/OptBinMod.png new file mode 100644 index 000000000000..dae2787e80ca Binary files /dev/null and b/media/sqlgram/OptBinMod.png differ diff --git a/media/sqlgram/OptBinary.png b/media/sqlgram/OptBinary.png new file mode 100644 index 000000000000..569c9b06fa0a Binary files /dev/null and b/media/sqlgram/OptBinary.png differ diff --git a/media/sqlgram/OptCharset.png b/media/sqlgram/OptCharset.png new file mode 100644 index 000000000000..60a5010c42e4 Binary files /dev/null and b/media/sqlgram/OptCharset.png differ diff --git a/media/sqlgram/OptCollate.png b/media/sqlgram/OptCollate.png new file mode 100644 index 000000000000..59b11f22c8d5 Binary files /dev/null and b/media/sqlgram/OptCollate.png differ diff --git a/media/sqlgram/OptExistingWindowName.png b/media/sqlgram/OptExistingWindowName.png new file mode 100644 index 000000000000..bc1605065d94 Binary files /dev/null and b/media/sqlgram/OptExistingWindowName.png differ diff --git a/media/sqlgram/OptFieldLen.png b/media/sqlgram/OptFieldLen.png new file mode 100644 index 000000000000..b76d252df13d Binary files /dev/null and b/media/sqlgram/OptFieldLen.png differ diff --git a/media/sqlgram/OptFromFirstLast.png b/media/sqlgram/OptFromFirstLast.png new file mode 100644 index 000000000000..efe2860885c4 Binary files /dev/null and b/media/sqlgram/OptFromFirstLast.png differ diff --git a/media/sqlgram/OptFull.png b/media/sqlgram/OptFull.png new file mode 100644 index 000000000000..96cbdfcdbd0c Binary files /dev/null and b/media/sqlgram/OptFull.png differ diff --git a/media/sqlgram/OptGConcatSeparator.png b/media/sqlgram/OptGConcatSeparator.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/OptGConcatSeparator.png differ diff --git a/media/sqlgram/OptInteger.png b/media/sqlgram/OptInteger.png new file mode 100644 index 000000000000..2d7b0842b864 Binary files /dev/null and b/media/sqlgram/OptInteger.png differ diff --git a/media/sqlgram/OptLLDefault.png b/media/sqlgram/OptLLDefault.png new file mode 100644 index 000000000000..8c550299f369 Binary files /dev/null and b/media/sqlgram/OptLLDefault.png differ diff --git a/media/sqlgram/OptLeadLagInfo.png b/media/sqlgram/OptLeadLagInfo.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/OptLeadLagInfo.png differ diff --git a/media/sqlgram/OptNullTreatment.png b/media/sqlgram/OptNullTreatment.png new file mode 100644 index 000000000000..a74a754524a7 Binary files /dev/null and b/media/sqlgram/OptNullTreatment.png differ diff --git a/media/sqlgram/OptPartitionClause.png b/media/sqlgram/OptPartitionClause.png new file mode 100644 index 000000000000..0ac1b3641d5b Binary files /dev/null and b/media/sqlgram/OptPartitionClause.png differ diff --git a/media/sqlgram/OptTable.png b/media/sqlgram/OptTable.png new file mode 100644 index 000000000000..40ed08c122c3 Binary files /dev/null and b/media/sqlgram/OptTable.png differ diff --git a/media/sqlgram/OptWindowFrameClause.png b/media/sqlgram/OptWindowFrameClause.png new file mode 100644 index 000000000000..6f6416a973ac Binary files /dev/null and b/media/sqlgram/OptWindowFrameClause.png differ diff --git a/media/sqlgram/OptWindowOrderByClause.png b/media/sqlgram/OptWindowOrderByClause.png new file mode 100644 index 000000000000..65ab9b054da6 Binary files /dev/null and b/media/sqlgram/OptWindowOrderByClause.png differ diff --git a/media/sqlgram/OptWindowingClause.png b/media/sqlgram/OptWindowingClause.png new file mode 100644 index 000000000000..36353dd3dfc1 Binary files /dev/null and b/media/sqlgram/OptWindowingClause.png differ diff --git a/media/sqlgram/OptionalBraces.png b/media/sqlgram/OptionalBraces.png new file mode 100644 index 000000000000..fa5dda98229c Binary files /dev/null and b/media/sqlgram/OptionalBraces.png differ diff --git a/media/sqlgram/OrReplace.png b/media/sqlgram/OrReplace.png new file mode 100644 index 000000000000..e94a3e140826 Binary files /dev/null and b/media/sqlgram/OrReplace.png differ diff --git a/media/sqlgram/Order.png b/media/sqlgram/Order.png new file mode 100644 index 000000000000..565693918265 Binary files /dev/null and b/media/sqlgram/Order.png differ diff --git a/media/sqlgram/OrderBy.png b/media/sqlgram/OrderBy.png new file mode 100644 index 000000000000..16f654b1335d Binary files /dev/null and b/media/sqlgram/OrderBy.png differ diff --git a/media/sqlgram/OrderByOptional.png b/media/sqlgram/OrderByOptional.png new file mode 100644 index 000000000000..c6f443b352dd Binary files /dev/null and b/media/sqlgram/OrderByOptional.png differ diff --git a/media/sqlgram/OuterOpt.png b/media/sqlgram/OuterOpt.png new file mode 100644 index 000000000000..bbe107766c84 Binary files /dev/null and b/media/sqlgram/OuterOpt.png differ diff --git a/media/sqlgram/PartDefOption.png b/media/sqlgram/PartDefOption.png new file mode 100644 index 000000000000..131fda09bd09 Binary files /dev/null and b/media/sqlgram/PartDefOption.png differ diff --git a/media/sqlgram/PartDefOptionsOpt.png b/media/sqlgram/PartDefOptionsOpt.png new file mode 100644 index 000000000000..8288844e8605 Binary files /dev/null and b/media/sqlgram/PartDefOptionsOpt.png differ diff --git a/media/sqlgram/PartDefValuesOpt.png b/media/sqlgram/PartDefValuesOpt.png new file mode 100644 index 000000000000..4c8ba3db15dc Binary files /dev/null and b/media/sqlgram/PartDefValuesOpt.png differ diff --git a/media/sqlgram/PartitionDefinition.png b/media/sqlgram/PartitionDefinition.png new file mode 100644 index 000000000000..90a33057ca41 Binary files /dev/null and b/media/sqlgram/PartitionDefinition.png differ diff --git a/media/sqlgram/PartitionDefinitionListOpt.png b/media/sqlgram/PartitionDefinitionListOpt.png new file mode 100644 index 000000000000..810edd937ab2 Binary files /dev/null and b/media/sqlgram/PartitionDefinitionListOpt.png differ diff --git a/media/sqlgram/PartitionNameList.png b/media/sqlgram/PartitionNameList.png new file mode 100644 index 000000000000..4158610f7881 Binary files /dev/null and b/media/sqlgram/PartitionNameList.png differ diff --git a/media/sqlgram/PartitionNameListOpt.png b/media/sqlgram/PartitionNameListOpt.png new file mode 100644 index 000000000000..162e9c6ad613 Binary files /dev/null and b/media/sqlgram/PartitionNameListOpt.png differ diff --git a/media/sqlgram/PartitionNumOpt.png b/media/sqlgram/PartitionNumOpt.png new file mode 100644 index 000000000000..8c45351e819a Binary files /dev/null and b/media/sqlgram/PartitionNumOpt.png differ diff --git a/media/sqlgram/PartitionOpt.png b/media/sqlgram/PartitionOpt.png new file mode 100644 index 000000000000..b11a0334f52e Binary files /dev/null and b/media/sqlgram/PartitionOpt.png differ diff --git a/media/sqlgram/PasswordOpt.png b/media/sqlgram/PasswordOpt.png new file mode 100644 index 000000000000..1e5159671341 Binary files /dev/null and b/media/sqlgram/PasswordOpt.png differ diff --git a/media/sqlgram/Precision.png b/media/sqlgram/Precision.png new file mode 100644 index 000000000000..1246640a3730 Binary files /dev/null and b/media/sqlgram/Precision.png differ diff --git a/media/sqlgram/PredicateExpr.png b/media/sqlgram/PredicateExpr.png new file mode 100644 index 000000000000..1197c60a1a1b Binary files /dev/null and b/media/sqlgram/PredicateExpr.png differ diff --git a/media/sqlgram/PrepareSQL.png b/media/sqlgram/PrepareSQL.png new file mode 100644 index 000000000000..c64f10fd95b7 Binary files /dev/null and b/media/sqlgram/PrepareSQL.png differ diff --git a/media/sqlgram/PreparedStmt.png b/media/sqlgram/PreparedStmt.png new file mode 100644 index 000000000000..0eaad0903967 Binary files /dev/null and b/media/sqlgram/PreparedStmt.png differ diff --git a/media/sqlgram/PrimaryExpression.png b/media/sqlgram/PrimaryExpression.png new file mode 100644 index 000000000000..32755daa45ad Binary files /dev/null and b/media/sqlgram/PrimaryExpression.png differ diff --git a/media/sqlgram/PrimaryFactor.png b/media/sqlgram/PrimaryFactor.png new file mode 100644 index 000000000000..ab9cb44ffc78 Binary files /dev/null and b/media/sqlgram/PrimaryFactor.png differ diff --git a/media/sqlgram/PrimaryOpt.png b/media/sqlgram/PrimaryOpt.png new file mode 100644 index 000000000000..052a40a4eb57 Binary files /dev/null and b/media/sqlgram/PrimaryOpt.png differ diff --git a/media/sqlgram/Priority.png b/media/sqlgram/Priority.png new file mode 100644 index 000000000000..8e95d12a091d Binary files /dev/null and b/media/sqlgram/Priority.png differ diff --git a/media/sqlgram/PriorityOpt.png b/media/sqlgram/PriorityOpt.png new file mode 100644 index 000000000000..4aed507b07b0 Binary files /dev/null and b/media/sqlgram/PriorityOpt.png differ diff --git a/media/sqlgram/PrivElem.png b/media/sqlgram/PrivElem.png new file mode 100644 index 000000000000..2fa90c4104f4 Binary files /dev/null and b/media/sqlgram/PrivElem.png differ diff --git a/media/sqlgram/PrivElemList.png b/media/sqlgram/PrivElemList.png new file mode 100644 index 000000000000..a993d4a9d4c8 Binary files /dev/null and b/media/sqlgram/PrivElemList.png differ diff --git a/media/sqlgram/PrivLevel.png b/media/sqlgram/PrivLevel.png new file mode 100644 index 000000000000..9e9d136d3e9f Binary files /dev/null and b/media/sqlgram/PrivLevel.png differ diff --git a/media/sqlgram/PrivType.png b/media/sqlgram/PrivType.png new file mode 100644 index 000000000000..19e1b7236737 Binary files /dev/null and b/media/sqlgram/PrivType.png differ diff --git a/media/sqlgram/QuickOptional.png b/media/sqlgram/QuickOptional.png new file mode 100644 index 000000000000..4bc77e2bb450 Binary files /dev/null and b/media/sqlgram/QuickOptional.png differ diff --git a/media/sqlgram/ReferDef.png b/media/sqlgram/ReferDef.png new file mode 100644 index 000000000000..3cb6b1da5f80 Binary files /dev/null and b/media/sqlgram/ReferDef.png differ diff --git a/media/sqlgram/ReferOpt.png b/media/sqlgram/ReferOpt.png new file mode 100644 index 000000000000..6313e12426dc Binary files /dev/null and b/media/sqlgram/ReferOpt.png differ diff --git a/media/sqlgram/RegexpOrNotOp.png b/media/sqlgram/RegexpOrNotOp.png new file mode 100644 index 000000000000..51e1fcaa8b1e Binary files /dev/null and b/media/sqlgram/RegexpOrNotOp.png differ diff --git a/media/sqlgram/RegexpSym.png b/media/sqlgram/RegexpSym.png new file mode 100644 index 000000000000..f03feabd0d14 Binary files /dev/null and b/media/sqlgram/RegexpSym.png differ diff --git a/media/sqlgram/RenameTableStmt.png b/media/sqlgram/RenameTableStmt.png new file mode 100644 index 000000000000..d4e6574fe6ee Binary files /dev/null and b/media/sqlgram/RenameTableStmt.png differ diff --git a/media/sqlgram/ReplaceIntoStmt.png b/media/sqlgram/ReplaceIntoStmt.png new file mode 100644 index 000000000000..4d9622921026 Binary files /dev/null and b/media/sqlgram/ReplaceIntoStmt.png differ diff --git a/media/sqlgram/ReplacePriority.png b/media/sqlgram/ReplacePriority.png new file mode 100644 index 000000000000..18c6cadcaf71 Binary files /dev/null and b/media/sqlgram/ReplacePriority.png differ diff --git a/media/sqlgram/RestrictOrCascadeOpt.png b/media/sqlgram/RestrictOrCascadeOpt.png new file mode 100644 index 000000000000..198ab814341b Binary files /dev/null and b/media/sqlgram/RestrictOrCascadeOpt.png differ diff --git a/media/sqlgram/RevokeStmt.png b/media/sqlgram/RevokeStmt.png new file mode 100644 index 000000000000..0469da480559 Binary files /dev/null and b/media/sqlgram/RevokeStmt.png differ diff --git a/media/sqlgram/RollbackStmt.png b/media/sqlgram/RollbackStmt.png new file mode 100644 index 000000000000..483728f4578b Binary files /dev/null and b/media/sqlgram/RollbackStmt.png differ diff --git a/media/sqlgram/RowFormat.png b/media/sqlgram/RowFormat.png new file mode 100644 index 000000000000..b067d9d0d3d5 Binary files /dev/null and b/media/sqlgram/RowFormat.png differ diff --git a/media/sqlgram/RowValue.png b/media/sqlgram/RowValue.png new file mode 100644 index 000000000000..3e518c267232 Binary files /dev/null and b/media/sqlgram/RowValue.png differ diff --git a/media/sqlgram/SelectLockOpt.png b/media/sqlgram/SelectLockOpt.png new file mode 100644 index 000000000000..c30f8da20a86 Binary files /dev/null and b/media/sqlgram/SelectLockOpt.png differ diff --git a/media/sqlgram/SelectStmt.png b/media/sqlgram/SelectStmt.png new file mode 100644 index 000000000000..aa2ba75cbb14 Binary files /dev/null and b/media/sqlgram/SelectStmt.png differ diff --git a/media/sqlgram/SelectStmtBasic.png b/media/sqlgram/SelectStmtBasic.png new file mode 100644 index 000000000000..b0782df4e015 Binary files /dev/null and b/media/sqlgram/SelectStmtBasic.png differ diff --git a/media/sqlgram/SelectStmtCalcFoundRows.png b/media/sqlgram/SelectStmtCalcFoundRows.png new file mode 100644 index 000000000000..9f235608db3b Binary files /dev/null and b/media/sqlgram/SelectStmtCalcFoundRows.png differ diff --git a/media/sqlgram/SelectStmtDistinct.png b/media/sqlgram/SelectStmtDistinct.png new file mode 100644 index 000000000000..4b6e46ddc2fb Binary files /dev/null and b/media/sqlgram/SelectStmtDistinct.png differ diff --git a/media/sqlgram/SelectStmtFieldList.png b/media/sqlgram/SelectStmtFieldList.png new file mode 100644 index 000000000000..6b2301c1b6af Binary files /dev/null and b/media/sqlgram/SelectStmtFieldList.png differ diff --git a/media/sqlgram/SelectStmtFromDualTable.png b/media/sqlgram/SelectStmtFromDualTable.png new file mode 100644 index 000000000000..f75e7ed7becd Binary files /dev/null and b/media/sqlgram/SelectStmtFromDualTable.png differ diff --git a/media/sqlgram/SelectStmtFromTable.png b/media/sqlgram/SelectStmtFromTable.png new file mode 100644 index 000000000000..afed289767ea Binary files /dev/null and b/media/sqlgram/SelectStmtFromTable.png differ diff --git a/media/sqlgram/SelectStmtGroup.png b/media/sqlgram/SelectStmtGroup.png new file mode 100644 index 000000000000..680afe583c5c Binary files /dev/null and b/media/sqlgram/SelectStmtGroup.png differ diff --git a/media/sqlgram/SelectStmtLimit.png b/media/sqlgram/SelectStmtLimit.png new file mode 100644 index 000000000000..f537cf150aad Binary files /dev/null and b/media/sqlgram/SelectStmtLimit.png differ diff --git a/media/sqlgram/SelectStmtOpts.png b/media/sqlgram/SelectStmtOpts.png new file mode 100644 index 000000000000..d439e0e8f16c Binary files /dev/null and b/media/sqlgram/SelectStmtOpts.png differ diff --git a/media/sqlgram/SelectStmtSQLCache.png b/media/sqlgram/SelectStmtSQLCache.png new file mode 100644 index 000000000000..b153aa161512 Binary files /dev/null and b/media/sqlgram/SelectStmtSQLCache.png differ diff --git a/media/sqlgram/SelectStmtStraightJoin.png b/media/sqlgram/SelectStmtStraightJoin.png new file mode 100644 index 000000000000..bc74163896ca Binary files /dev/null and b/media/sqlgram/SelectStmtStraightJoin.png differ diff --git a/media/sqlgram/SetExpr.png b/media/sqlgram/SetExpr.png new file mode 100644 index 000000000000..b35de99c236d Binary files /dev/null and b/media/sqlgram/SetExpr.png differ diff --git a/media/sqlgram/SetStmt.png b/media/sqlgram/SetStmt.png new file mode 100644 index 000000000000..a8c1990dc6e6 Binary files /dev/null and b/media/sqlgram/SetStmt.png differ diff --git a/media/sqlgram/ShowDatabaseNameOpt.png b/media/sqlgram/ShowDatabaseNameOpt.png new file mode 100644 index 000000000000..3526a0c318da Binary files /dev/null and b/media/sqlgram/ShowDatabaseNameOpt.png differ diff --git a/media/sqlgram/ShowIndexKwd.png b/media/sqlgram/ShowIndexKwd.png new file mode 100644 index 000000000000..cbf592f12735 Binary files /dev/null and b/media/sqlgram/ShowIndexKwd.png differ diff --git a/media/sqlgram/ShowLikeOrWhereOpt.png b/media/sqlgram/ShowLikeOrWhereOpt.png new file mode 100644 index 000000000000..c2e3cd080751 Binary files /dev/null and b/media/sqlgram/ShowLikeOrWhereOpt.png differ diff --git a/media/sqlgram/ShowStmt.png b/media/sqlgram/ShowStmt.png new file mode 100644 index 000000000000..78fd96a91a5a Binary files /dev/null and b/media/sqlgram/ShowStmt.png differ diff --git a/media/sqlgram/ShowTableAliasOpt.png b/media/sqlgram/ShowTableAliasOpt.png new file mode 100644 index 000000000000..63a13c8a3db1 Binary files /dev/null and b/media/sqlgram/ShowTableAliasOpt.png differ diff --git a/media/sqlgram/ShowTargetFilterable.png b/media/sqlgram/ShowTargetFilterable.png new file mode 100644 index 000000000000..f8e3ad0cd65d Binary files /dev/null and b/media/sqlgram/ShowTargetFilterable.png differ diff --git a/media/sqlgram/SignedLiteral.png b/media/sqlgram/SignedLiteral.png new file mode 100644 index 000000000000..e0ffacd7cd69 Binary files /dev/null and b/media/sqlgram/SignedLiteral.png differ diff --git a/media/sqlgram/SimpleExpr.png b/media/sqlgram/SimpleExpr.png new file mode 100644 index 000000000000..9fa501a9995c Binary files /dev/null and b/media/sqlgram/SimpleExpr.png differ diff --git a/media/sqlgram/SimpleIdent.png b/media/sqlgram/SimpleIdent.png new file mode 100644 index 000000000000..31d6a51f29ac Binary files /dev/null and b/media/sqlgram/SimpleIdent.png differ diff --git a/media/sqlgram/Start.png b/media/sqlgram/Start.png new file mode 100644 index 000000000000..fdf69d377dfa Binary files /dev/null and b/media/sqlgram/Start.png differ diff --git a/media/sqlgram/Starting.png b/media/sqlgram/Starting.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/Starting.png differ diff --git a/media/sqlgram/Statement.png b/media/sqlgram/Statement.png new file mode 100644 index 000000000000..84104ba44d3a Binary files /dev/null and b/media/sqlgram/Statement.png differ diff --git a/media/sqlgram/StatsPersistentVal.png b/media/sqlgram/StatsPersistentVal.png new file mode 100644 index 000000000000..e7fc12e8ebcd Binary files /dev/null and b/media/sqlgram/StatsPersistentVal.png differ diff --git a/media/sqlgram/StringName.png b/media/sqlgram/StringName.png new file mode 100644 index 000000000000..065f275b7be4 Binary files /dev/null and b/media/sqlgram/StringName.png differ diff --git a/media/sqlgram/StringType.png b/media/sqlgram/StringType.png new file mode 100644 index 000000000000..92e0c9ba4ff6 Binary files /dev/null and b/media/sqlgram/StringType.png differ diff --git a/media/sqlgram/SubPartitionNumOpt.png b/media/sqlgram/SubPartitionNumOpt.png new file mode 100644 index 000000000000..adc78d76e654 Binary files /dev/null and b/media/sqlgram/SubPartitionNumOpt.png differ diff --git a/media/sqlgram/SubPartitionOpt.png b/media/sqlgram/SubPartitionOpt.png new file mode 100644 index 000000000000..654540b3799b Binary files /dev/null and b/media/sqlgram/SubPartitionOpt.png differ diff --git a/media/sqlgram/SubSelect.png b/media/sqlgram/SubSelect.png new file mode 100644 index 000000000000..4ba56cd3338d Binary files /dev/null and b/media/sqlgram/SubSelect.png differ diff --git a/media/sqlgram/SumExpr.png b/media/sqlgram/SumExpr.png new file mode 100644 index 000000000000..233af5524e9b Binary files /dev/null and b/media/sqlgram/SumExpr.png differ diff --git a/media/sqlgram/Symbol.png b/media/sqlgram/Symbol.png new file mode 100644 index 000000000000..065f275b7be4 Binary files /dev/null and b/media/sqlgram/Symbol.png differ diff --git a/media/sqlgram/TableAsName.png b/media/sqlgram/TableAsName.png new file mode 100644 index 000000000000..67d680e13352 Binary files /dev/null and b/media/sqlgram/TableAsName.png differ diff --git a/media/sqlgram/TableAsNameOpt.png b/media/sqlgram/TableAsNameOpt.png new file mode 100644 index 000000000000..cda8ce1a00f9 Binary files /dev/null and b/media/sqlgram/TableAsNameOpt.png differ diff --git a/media/sqlgram/TableElement.png b/media/sqlgram/TableElement.png new file mode 100644 index 000000000000..49d54cd00537 Binary files /dev/null and b/media/sqlgram/TableElement.png differ diff --git a/media/sqlgram/TableElementListOpt.png b/media/sqlgram/TableElementListOpt.png new file mode 100644 index 000000000000..12d9436b7c42 Binary files /dev/null and b/media/sqlgram/TableElementListOpt.png differ diff --git a/media/sqlgram/TableFactor.png b/media/sqlgram/TableFactor.png new file mode 100644 index 000000000000..8b367a1d0d8c Binary files /dev/null and b/media/sqlgram/TableFactor.png differ diff --git a/media/sqlgram/TableLock.png b/media/sqlgram/TableLock.png new file mode 100644 index 000000000000..5cb847b2eab8 Binary files /dev/null and b/media/sqlgram/TableLock.png differ diff --git a/media/sqlgram/TableName.png b/media/sqlgram/TableName.png new file mode 100644 index 000000000000..296811cbfd9a Binary files /dev/null and b/media/sqlgram/TableName.png differ diff --git a/media/sqlgram/TableNameList.png b/media/sqlgram/TableNameList.png new file mode 100644 index 000000000000..2fd3076caa93 Binary files /dev/null and b/media/sqlgram/TableNameList.png differ diff --git a/media/sqlgram/TableNameListOpt.png b/media/sqlgram/TableNameListOpt.png new file mode 100644 index 000000000000..bffdf101a935 Binary files /dev/null and b/media/sqlgram/TableNameListOpt.png differ diff --git a/media/sqlgram/TableOptimizerHints.png b/media/sqlgram/TableOptimizerHints.png new file mode 100644 index 000000000000..4638d4ea9aa9 Binary files /dev/null and b/media/sqlgram/TableOptimizerHints.png differ diff --git a/media/sqlgram/TableOption.png b/media/sqlgram/TableOption.png new file mode 100644 index 000000000000..732ef918bde3 Binary files /dev/null and b/media/sqlgram/TableOption.png differ diff --git a/media/sqlgram/TableOptionList.png b/media/sqlgram/TableOptionList.png new file mode 100644 index 000000000000..2109bdd8fc87 Binary files /dev/null and b/media/sqlgram/TableOptionList.png differ diff --git a/media/sqlgram/TableOptionListOpt.png b/media/sqlgram/TableOptionListOpt.png new file mode 100644 index 000000000000..962622c4fa20 Binary files /dev/null and b/media/sqlgram/TableOptionListOpt.png differ diff --git a/media/sqlgram/TableOrTables.png b/media/sqlgram/TableOrTables.png new file mode 100644 index 000000000000..aacd0694727b Binary files /dev/null and b/media/sqlgram/TableOrTables.png differ diff --git a/media/sqlgram/TableRef.png b/media/sqlgram/TableRef.png new file mode 100644 index 000000000000..69ebe857e7d5 Binary files /dev/null and b/media/sqlgram/TableRef.png differ diff --git a/media/sqlgram/TableRefs.png b/media/sqlgram/TableRefs.png new file mode 100644 index 000000000000..d28039049b1d Binary files /dev/null and b/media/sqlgram/TableRefs.png differ diff --git a/media/sqlgram/TableRefsClause.png b/media/sqlgram/TableRefsClause.png new file mode 100644 index 000000000000..76e9305fcba2 Binary files /dev/null and b/media/sqlgram/TableRefsClause.png differ diff --git a/media/sqlgram/TableToTable.png b/media/sqlgram/TableToTable.png new file mode 100644 index 000000000000..4adf7d2f8b33 Binary files /dev/null and b/media/sqlgram/TableToTable.png differ diff --git a/media/sqlgram/TablesTerminalSym.png b/media/sqlgram/TablesTerminalSym.png new file mode 100644 index 000000000000..5988c7b8b3e4 Binary files /dev/null and b/media/sqlgram/TablesTerminalSym.png differ diff --git a/media/sqlgram/TextType.png b/media/sqlgram/TextType.png new file mode 100644 index 000000000000..085786820299 Binary files /dev/null and b/media/sqlgram/TextType.png differ diff --git a/media/sqlgram/TiDBKeyword.png b/media/sqlgram/TiDBKeyword.png new file mode 100644 index 000000000000..b86384425331 Binary files /dev/null and b/media/sqlgram/TiDBKeyword.png differ diff --git a/media/sqlgram/TimeUnit.png b/media/sqlgram/TimeUnit.png new file mode 100644 index 000000000000..8858d82ace3d Binary files /dev/null and b/media/sqlgram/TimeUnit.png differ diff --git a/media/sqlgram/TimestampUnit.png b/media/sqlgram/TimestampUnit.png new file mode 100644 index 000000000000..75a2eef1964d Binary files /dev/null and b/media/sqlgram/TimestampUnit.png differ diff --git a/media/sqlgram/TraceStmt.png b/media/sqlgram/TraceStmt.png new file mode 100644 index 000000000000..f4023451875b Binary files /dev/null and b/media/sqlgram/TraceStmt.png differ diff --git a/media/sqlgram/TraceableStmt.png b/media/sqlgram/TraceableStmt.png new file mode 100644 index 000000000000..bddac1e18228 Binary files /dev/null and b/media/sqlgram/TraceableStmt.png differ diff --git a/media/sqlgram/TransactionChar.png b/media/sqlgram/TransactionChar.png new file mode 100644 index 000000000000..bbd0bfb3ac5a Binary files /dev/null and b/media/sqlgram/TransactionChar.png differ diff --git a/media/sqlgram/TrimDirection.png b/media/sqlgram/TrimDirection.png new file mode 100644 index 000000000000..89a994a84e24 Binary files /dev/null and b/media/sqlgram/TrimDirection.png differ diff --git a/media/sqlgram/TruncateTableStmt.png b/media/sqlgram/TruncateTableStmt.png new file mode 100644 index 000000000000..baa15a6d6788 Binary files /dev/null and b/media/sqlgram/TruncateTableStmt.png differ diff --git a/media/sqlgram/Type.png b/media/sqlgram/Type.png new file mode 100644 index 000000000000..6ca36679743e Binary files /dev/null and b/media/sqlgram/Type.png differ diff --git a/media/sqlgram/UnReservedKeyword.png b/media/sqlgram/UnReservedKeyword.png new file mode 100644 index 000000000000..c92e93602746 Binary files /dev/null and b/media/sqlgram/UnReservedKeyword.png differ diff --git a/media/sqlgram/UnionOpt.png b/media/sqlgram/UnionOpt.png new file mode 100644 index 000000000000..9f7c7b30481c Binary files /dev/null and b/media/sqlgram/UnionOpt.png differ diff --git a/media/sqlgram/UnionSelect.png b/media/sqlgram/UnionSelect.png new file mode 100644 index 000000000000..0fd534d55a21 Binary files /dev/null and b/media/sqlgram/UnionSelect.png differ diff --git a/media/sqlgram/UnionStmt.png b/media/sqlgram/UnionStmt.png new file mode 100644 index 000000000000..a37f3893a063 Binary files /dev/null and b/media/sqlgram/UnionStmt.png differ diff --git a/media/sqlgram/UnlockTablesStmt.png b/media/sqlgram/UnlockTablesStmt.png new file mode 100644 index 000000000000..fdc904c310b5 Binary files /dev/null and b/media/sqlgram/UnlockTablesStmt.png differ diff --git a/media/sqlgram/UpdateStmt.png b/media/sqlgram/UpdateStmt.png new file mode 100644 index 000000000000..35c4ebf57f00 Binary files /dev/null and b/media/sqlgram/UpdateStmt.png differ diff --git a/media/sqlgram/UseStmt.png b/media/sqlgram/UseStmt.png new file mode 100644 index 000000000000..23206eda5ad1 Binary files /dev/null and b/media/sqlgram/UseStmt.png differ diff --git a/media/sqlgram/UserSpec.png b/media/sqlgram/UserSpec.png new file mode 100644 index 000000000000..bd74951a3c17 Binary files /dev/null and b/media/sqlgram/UserSpec.png differ diff --git a/media/sqlgram/UserSpecList.png b/media/sqlgram/UserSpecList.png new file mode 100644 index 000000000000..5c06ec4fd1a0 Binary files /dev/null and b/media/sqlgram/UserSpecList.png differ diff --git a/media/sqlgram/Username.png b/media/sqlgram/Username.png new file mode 100644 index 000000000000..10588135ec9f Binary files /dev/null and b/media/sqlgram/Username.png differ diff --git a/media/sqlgram/ValueSym.png b/media/sqlgram/ValueSym.png new file mode 100644 index 000000000000..1f206d86724c Binary files /dev/null and b/media/sqlgram/ValueSym.png differ diff --git a/media/sqlgram/ValuesList.png b/media/sqlgram/ValuesList.png new file mode 100644 index 000000000000..6a3696d45b9c Binary files /dev/null and b/media/sqlgram/ValuesList.png differ diff --git a/media/sqlgram/ValuesOpt.png b/media/sqlgram/ValuesOpt.png new file mode 100644 index 000000000000..535eabec0232 Binary files /dev/null and b/media/sqlgram/ValuesOpt.png differ diff --git a/media/sqlgram/Varchar.png b/media/sqlgram/Varchar.png new file mode 100644 index 000000000000..142a9eca4cb4 Binary files /dev/null and b/media/sqlgram/Varchar.png differ diff --git a/media/sqlgram/Variable.png b/media/sqlgram/Variable.png new file mode 100644 index 000000000000..b246d5e803f1 Binary files /dev/null and b/media/sqlgram/Variable.png differ diff --git a/media/sqlgram/VariableAssignment.png b/media/sqlgram/VariableAssignment.png new file mode 100644 index 000000000000..73a3e7487733 Binary files /dev/null and b/media/sqlgram/VariableAssignment.png differ diff --git a/media/sqlgram/ViewAlgorithm.png b/media/sqlgram/ViewAlgorithm.png new file mode 100644 index 000000000000..43bf148eb348 Binary files /dev/null and b/media/sqlgram/ViewAlgorithm.png differ diff --git a/media/sqlgram/ViewCheckOption.png b/media/sqlgram/ViewCheckOption.png new file mode 100644 index 000000000000..12237a4361c1 Binary files /dev/null and b/media/sqlgram/ViewCheckOption.png differ diff --git a/media/sqlgram/ViewDefiner.png b/media/sqlgram/ViewDefiner.png new file mode 100644 index 000000000000..7d44d72eb31c Binary files /dev/null and b/media/sqlgram/ViewDefiner.png differ diff --git a/media/sqlgram/ViewFieldList.png b/media/sqlgram/ViewFieldList.png new file mode 100644 index 000000000000..8bfb381bfb53 Binary files /dev/null and b/media/sqlgram/ViewFieldList.png differ diff --git a/media/sqlgram/ViewName.png b/media/sqlgram/ViewName.png new file mode 100644 index 000000000000..47dafce7d661 Binary files /dev/null and b/media/sqlgram/ViewName.png differ diff --git a/media/sqlgram/ViewSQLSecurity.png b/media/sqlgram/ViewSQLSecurity.png new file mode 100644 index 000000000000..592eef52ef6b Binary files /dev/null and b/media/sqlgram/ViewSQLSecurity.png differ diff --git a/media/sqlgram/VirtualOrStored.png b/media/sqlgram/VirtualOrStored.png new file mode 100644 index 000000000000..066096c580bb Binary files /dev/null and b/media/sqlgram/VirtualOrStored.png differ diff --git a/media/sqlgram/WhenClause.png b/media/sqlgram/WhenClause.png new file mode 100644 index 000000000000..0ce6a4052728 Binary files /dev/null and b/media/sqlgram/WhenClause.png differ diff --git a/media/sqlgram/WhereClause.png b/media/sqlgram/WhereClause.png new file mode 100644 index 000000000000..8a46aacf6513 Binary files /dev/null and b/media/sqlgram/WhereClause.png differ diff --git a/media/sqlgram/WhereClauseOptional.png b/media/sqlgram/WhereClauseOptional.png new file mode 100644 index 000000000000..1b8979a8b012 Binary files /dev/null and b/media/sqlgram/WhereClauseOptional.png differ diff --git a/media/sqlgram/WindowClauseOptional.png b/media/sqlgram/WindowClauseOptional.png new file mode 100644 index 000000000000..d7a617bdc95c Binary files /dev/null and b/media/sqlgram/WindowClauseOptional.png differ diff --git a/media/sqlgram/WindowDefinition.png b/media/sqlgram/WindowDefinition.png new file mode 100644 index 000000000000..e28cc161971b Binary files /dev/null and b/media/sqlgram/WindowDefinition.png differ diff --git a/media/sqlgram/WindowFrameBetween.png b/media/sqlgram/WindowFrameBetween.png new file mode 100644 index 000000000000..cf54f99b5816 Binary files /dev/null and b/media/sqlgram/WindowFrameBetween.png differ diff --git a/media/sqlgram/WindowFrameBound.png b/media/sqlgram/WindowFrameBound.png new file mode 100644 index 000000000000..be09bc8f2021 Binary files /dev/null and b/media/sqlgram/WindowFrameBound.png differ diff --git a/media/sqlgram/WindowFrameExtent.png b/media/sqlgram/WindowFrameExtent.png new file mode 100644 index 000000000000..f87c85d8e62a Binary files /dev/null and b/media/sqlgram/WindowFrameExtent.png differ diff --git a/media/sqlgram/WindowFrameStart.png b/media/sqlgram/WindowFrameStart.png new file mode 100644 index 000000000000..92dbbf84d7dc Binary files /dev/null and b/media/sqlgram/WindowFrameStart.png differ diff --git a/media/sqlgram/WindowFrameUnits.png b/media/sqlgram/WindowFrameUnits.png new file mode 100644 index 000000000000..fc94832a3873 Binary files /dev/null and b/media/sqlgram/WindowFrameUnits.png differ diff --git a/media/sqlgram/WindowFuncCall.png b/media/sqlgram/WindowFuncCall.png new file mode 100644 index 000000000000..dcc580c0230c Binary files /dev/null and b/media/sqlgram/WindowFuncCall.png differ diff --git a/media/sqlgram/WindowName.png b/media/sqlgram/WindowName.png new file mode 100644 index 000000000000..065f275b7be4 Binary files /dev/null and b/media/sqlgram/WindowName.png differ diff --git a/media/sqlgram/WindowNameOrSpec.png b/media/sqlgram/WindowNameOrSpec.png new file mode 100644 index 000000000000..b8dac6fbb988 Binary files /dev/null and b/media/sqlgram/WindowNameOrSpec.png differ diff --git a/media/sqlgram/WindowSpec.png b/media/sqlgram/WindowSpec.png new file mode 100644 index 000000000000..2a7ee0740dd9 Binary files /dev/null and b/media/sqlgram/WindowSpec.png differ diff --git a/media/sqlgram/WindowSpecDetails.png b/media/sqlgram/WindowSpecDetails.png new file mode 100644 index 000000000000..9f2219d3a07a Binary files /dev/null and b/media/sqlgram/WindowSpecDetails.png differ diff --git a/media/sqlgram/WindowingClause.png b/media/sqlgram/WindowingClause.png new file mode 100644 index 000000000000..01b37b5ce9bf Binary files /dev/null and b/media/sqlgram/WindowingClause.png differ diff --git a/media/sqlgram/WithGrantOptionOpt.png b/media/sqlgram/WithGrantOptionOpt.png new file mode 100644 index 000000000000..9b626f3e3fb8 Binary files /dev/null and b/media/sqlgram/WithGrantOptionOpt.png differ diff --git a/media/sqlgram/WithReadLockOpt.png b/media/sqlgram/WithReadLockOpt.png new file mode 100644 index 000000000000..44a704d2f749 Binary files /dev/null and b/media/sqlgram/WithReadLockOpt.png differ diff --git a/media/sqlgram/logAnd.png b/media/sqlgram/logAnd.png new file mode 100644 index 000000000000..c7ab4999a319 Binary files /dev/null and b/media/sqlgram/logAnd.png differ diff --git a/media/sqlgram/logOr.png b/media/sqlgram/logOr.png new file mode 100644 index 000000000000..cefac60d19f1 Binary files /dev/null and b/media/sqlgram/logOr.png differ diff --git a/media/sqlgram/rr-1.45.1338.png b/media/sqlgram/rr-1.45.1338.png new file mode 100644 index 000000000000..22b50eb63785 Binary files /dev/null and b/media/sqlgram/rr-1.45.1338.png differ diff --git a/media/sqlgram/rr-1.59.1797.png b/media/sqlgram/rr-1.59.1797.png new file mode 100644 index 000000000000..d7fc4c9c91ac Binary files /dev/null and b/media/sqlgram/rr-1.59.1797.png differ diff --git a/media/trace-paste.png b/media/trace-paste.png new file mode 100644 index 000000000000..141f64ee61a7 Binary files /dev/null and b/media/trace-paste.png differ diff --git a/media/trace-view.png b/media/trace-view.png new file mode 100644 index 000000000000..4869f64eda1e Binary files /dev/null and b/media/trace-view.png differ