From 4839002ce27ad94334bce8e9dd5ebd1dfd32f99a Mon Sep 17 00:00:00 2001 From: Charlotte Liu <37295236+CharLotteiu@users.noreply.github.com> Date: Mon, 26 Apr 2021 13:27:55 +0800 Subject: [PATCH] sql-statements: use EBNF to render syntax diagrams - third batch (#5540) --- sql-statements/sql-statement-execute.md | 7 +- .../sql-statement-explain-analyze.md | 30 +++++--- sql-statements/sql-statement-explain.md | 30 +++++--- .../sql-statement-flashback-table.md | 17 ++--- .../sql-statement-flush-privileges.md | 26 ++++--- sql-statements/sql-statement-flush-status.md | 26 ++++--- sql-statements/sql-statement-flush-tables.md | 43 +++++------ .../sql-statement-grant-privileges.md | 73 ++++++++++++------- sql-statements/sql-statement-grant-role.md | 17 ++--- sql-statements/sql-statement-insert.md | 50 ++++++------- sql-statements/sql-statement-kill.md | 10 +-- sql-statements/sql-statement-load-data.md | 7 +- sql-statements/sql-statement-load-stats.md | 7 +- sql-statements/sql-statement-modify-column.md | 54 +++++++++----- sql-statements/sql-statement-prepare.md | 13 ++-- sql-statements/sql-statement-recover-table.md | 20 ++--- sql-statements/sql-statement-rename-index.md | 13 ++-- sql-statements/sql-statement-rename-table.md | 12 +-- sql-statements/sql-statement-replace.md | 33 +++++---- .../sql-statement-revoke-privileges.md | 73 ++++++++++++------- sql-statements/sql-statement-revoke-role.md | 17 ++--- sql-statements/sql-statement-rollback.md | 13 ++-- 22 files changed, 330 insertions(+), 261 deletions(-) diff --git a/sql-statements/sql-statement-execute.md b/sql-statements/sql-statement-execute.md index 7b80883633bf..b82e8dd14949 100644 --- a/sql-statements/sql-statement-execute.md +++ b/sql-statements/sql-statement-execute.md @@ -10,9 +10,10 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-execute/','/docs-cn/dev/ref ## 语法图 -**ExecuteStmt:** - -![ExecuteStmt](/media/sqlgram/ExecuteStmt.png) +```ebnf+diagram +ExecuteStmt ::= + 'EXECUTE' Identifier ( 'USING' UserVariable ( ',' UserVariable )* )? +``` ## 示例 diff --git a/sql-statements/sql-statement-explain-analyze.md b/sql-statements/sql-statement-explain-analyze.md index 593764c14a68..974adcbdc1bf 100644 --- a/sql-statements/sql-statement-explain-analyze.md +++ b/sql-statements/sql-statement-explain-analyze.md @@ -14,17 +14,23 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-explain-analyze/','/docs-cn ## 语法图 -**ExplainSym:** - -![ExplainSym](/media/sqlgram/ExplainSym.png) - -**ExplainStmt:** - -![ExplainStmt](/media/sqlgram/ExplainStmt.png) - -**ExplainableStmt:** - -![ExplainableStmt](/media/sqlgram/ExplainableStmt.png) +```ebnf+diagram +ExplainSym ::= + 'EXPLAIN' +| 'DESCRIBE' +| 'DESC' + +ExplainStmt ::= + ExplainSym ( TableName ColumnName? | 'ANALYZE'? ExplainableStmt | 'FOR' 'CONNECTION' NUM | 'FORMAT' '=' ( stringLit | ExplainFormatType ) ( 'FOR' 'CONNECTION' NUM | ExplainableStmt ) ) + +ExplainableStmt ::= + SelectStmt +| DeleteFromStmt +| UpdateStmt +| InsertIntoStmt +| ReplaceIntoStmt +| UnionStmt +``` ## EXPLAIN ANALYZE 输出格式 @@ -181,7 +187,7 @@ inner:{total:4.297515932s, concurrency:5, task:17, construct:97.96291ms, fetch:4 `IndexHashJoin` 算子包含以下执行信息: ```sql -inner:{total:4.429220003s, concurrency:5, task:17, construct:96.207725ms, fetch:4.239324006s, build:24.567801ms, join:93.607362ms} +inner:{total:4.429220003s, concurrency:5, task:17, construct:96.207725ms, fetch:4.239324006s, build:24.567801ms, join:93.607362ms} ``` - `inner`:inner worker 的执行信息,具体如下: diff --git a/sql-statements/sql-statement-explain.md b/sql-statements/sql-statement-explain.md index 72d431478207..c93ac60bd1bd 100644 --- a/sql-statements/sql-statement-explain.md +++ b/sql-statements/sql-statement-explain.md @@ -14,17 +14,23 @@ TiDB 支持 `EXPLAIN [options] FOR CONNECTION connection_id`,但与 MySQL 的 ## 语法图 -**ExplainSym:** - -![ExplainSym](/media/sqlgram/ExplainSym.png) - -**ExplainStmt:** - -![ExplainStmt](/media/sqlgram/ExplainStmt.png) - -**ExplainableStmt:** - -![ExplainableStmt](/media/sqlgram/ExplainableStmt.png) +```ebnf+diagram +ExplainSym ::= + 'EXPLAIN' +| 'DESCRIBE' +| 'DESC' + +ExplainStmt ::= + ExplainSym ( TableName ColumnName? | 'ANALYZE'? ExplainableStmt | 'FOR' 'CONNECTION' NUM | 'FORMAT' '=' ( stringLit | ExplainFormatType ) ( 'FOR' 'CONNECTION' NUM | ExplainableStmt ) ) + +ExplainableStmt ::= + SelectStmt +| DeleteFromStmt +| UpdateStmt +| InsertIntoStmt +| ReplaceIntoStmt +| UnionStmt +``` ## EXPLAIN 输出格式 @@ -192,7 +198,7 @@ desc format = "dot" select A.a, B.b from t A join t B on A.a > B.b where A.a < 1 +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | dot contents | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| +| digraph Projection_8 { subgraph cluster8{ node [style=filled, color=lightgrey] diff --git a/sql-statements/sql-statement-flashback-table.md b/sql-statements/sql-statement-flashback-table.md index d087d51baa48..79eb30774f69 100644 --- a/sql-statements/sql-statement-flashback-table.md +++ b/sql-statements/sql-statement-flashback-table.md @@ -27,17 +27,16 @@ FLASHBACK TABLE table_name [TO other_table_name] ### 语法图 -**FlashbackTableStmt:** +```ebnf+diagram +FlashbackTableStmt ::= + 'FLASHBACK' 'TABLE' TableName FlashbackToNewName -![FlashbackTableStmt](/media/sqlgram/FlashbackTableStmt.png) +TableName ::= + Identifier ( '.' Identifier )? -**TableName:** - -![TableName](/media/sqlgram/TableName.png) - -**FlashbackToNewName:** - -![FlashbackToNewName](/media/sqlgram/FlashbackToNewName.png) +FlashbackToNewName ::= + ( 'TO' Identifier )? +``` ## 注意事项 diff --git a/sql-statements/sql-statement-flush-privileges.md b/sql-statements/sql-statement-flush-privileges.md index d0349a64d542..f2930a6baab8 100644 --- a/sql-statements/sql-statement-flush-privileges.md +++ b/sql-statements/sql-statement-flush-privileges.md @@ -10,17 +10,21 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-flush-privileges/','/docs-c ## 语法图 -**FlushStmt:** - -![FlushStmt](/media/sqlgram/FlushStmt.png) - -**NoWriteToBinLogAliasOpt:** - -![NoWriteToBinLogAliasOpt](/media/sqlgram/NoWriteToBinLogAliasOpt.png) - -**FlushOption:** - -![FlushOption](/media/sqlgram/FlushOption.png) +```ebnf+diagram +FlushStmt ::= + 'FLUSH' NoWriteToBinLogAliasOpt FlushOption + +NoWriteToBinLogAliasOpt ::= + ( 'NO_WRITE_TO_BINLOG' | 'LOCAL' )? + +FlushOption ::= + 'PRIVILEGES' +| 'STATUS' +| 'TIDB' 'PLUGINS' PluginNameList +| 'HOSTS' +| LogTypeOpt 'LOGS' +| TableOrTables TableNameListOpt WithReadLockOpt +``` ## 示例 diff --git a/sql-statements/sql-statement-flush-status.md b/sql-statements/sql-statement-flush-status.md index a902a5d69d69..ca9cabc47c80 100644 --- a/sql-statements/sql-statement-flush-status.md +++ b/sql-statements/sql-statement-flush-status.md @@ -10,17 +10,21 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-flush-status/','/docs-cn/de ## 语法图 -**FlushStmt:** - -![FlushStmt](/media/sqlgram/FlushStmt.png) - -**NoWriteToBinLogAliasOpt:** - -![NoWriteToBinLogAliasOpt](/media/sqlgram/NoWriteToBinLogAliasOpt.png) - -**FlushOption:** - -![FlushOption](/media/sqlgram/FlushOption.png) +```ebnf+diagram +FlushStmt ::= + 'FLUSH' NoWriteToBinLogAliasOpt FlushOption + +NoWriteToBinLogAliasOpt ::= + ( 'NO_WRITE_TO_BINLOG' | 'LOCAL' )? + +FlushOption ::= + 'PRIVILEGES' +| 'STATUS' +| 'TIDB' 'PLUGINS' PluginNameList +| 'HOSTS' +| LogTypeOpt 'LOGS' +| TableOrTables TableNameListOpt WithReadLockOpt +``` ## 示例 diff --git a/sql-statements/sql-statement-flush-tables.md b/sql-statements/sql-statement-flush-tables.md index b5a8d691fb20..a5b751c1c6b6 100644 --- a/sql-statements/sql-statement-flush-tables.md +++ b/sql-statements/sql-statement-flush-tables.md @@ -10,33 +10,34 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-flush-tables/','/docs-cn/de ## 语法图 -**FlushStmt:** +```ebnf+diagram +FlushStmt ::= + 'FLUSH' NoWriteToBinLogAliasOpt FlushOption -![FlushStmt](/media/sqlgram/FlushStmt.png) +NoWriteToBinLogAliasOpt ::= + ( 'NO_WRITE_TO_BINLOG' | 'LOCAL' )? -**NoWriteToBinLogAliasOpt:** +FlushOption ::= + 'PRIVILEGES' +| 'STATUS' +| 'TIDB' 'PLUGINS' PluginNameList +| 'HOSTS' +| LogTypeOpt 'LOGS' +| TableOrTables TableNameListOpt WithReadLockOpt -![NoWriteToBinLogAliasOpt](/media/sqlgram/NoWriteToBinLogAliasOpt.png) +LogTypeOpt ::= + ( 'BINARY' | 'ENGINE' | 'ERROR' | 'GENERAL' | 'SLOW' )? -**FlushOption:** +TableOrTables ::= + 'TABLE' +| 'TABLES' -![FlushOption](/media/sqlgram/FlushOption.png) +TableNameListOpt ::= + TableNameList? -**LogTypeOpt:** - -![LogTypeOpt](/media/sqlgram/LogTypeOpt.png) - -**TableOrTables:** - -![TableOrTables](/media/sqlgram/TableOrTables.png) - -**TableNameListOpt:** - -![TableNameListOpt](/media/sqlgram/TableNameListOpt.png) - -**WithReadLockOpt:** - -![WithReadLockOpt](/media/sqlgram/WithReadLockOpt.png) +WithReadLockOpt ::= + ( 'WITH' 'READ' 'LOCK' )? +``` ## 示例 diff --git a/sql-statements/sql-statement-grant-privileges.md b/sql-statements/sql-statement-grant-privileges.md index 8a0c64a0db4a..993c1956f850 100644 --- a/sql-statements/sql-statement-grant-privileges.md +++ b/sql-statements/sql-statement-grant-privileges.md @@ -10,33 +10,52 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-grant-privileges/','/docs-c ## 语法图 -**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) +```ebnf+diagram +GrantStmt ::= + 'GRANT' PrivElemList 'ON' ObjectType PrivLevel 'TO' UserSpecList RequireClauseOpt WithGrantOptionOpt + +PrivElemList ::= + PrivElem ( ',' PrivElem )* + +PrivElem ::= + PrivType ( '(' ColumnNameList ')' )? + +PrivType ::= + 'ALL' 'PRIVILEGES'? +| 'ALTER' 'ROUTINE'? +| 'CREATE' ( 'USER' | 'TEMPORARY' 'TABLES' | 'VIEW' | 'ROLE' | 'ROUTINE' )? +| 'TRIGGER' +| 'DELETE' +| 'DROP' 'ROLE'? +| 'PROCESS' +| 'EXECUTE' +| 'INDEX' +| 'INSERT' +| 'SELECT' +| 'SUPER' +| 'SHOW' ( 'DATABASES' | 'VIEW' ) +| 'UPDATE' +| 'GRANT' 'OPTION' +| 'REFERENCES' +| 'REPLICATION' ( 'SLAVE' | 'CLIENT' ) +| 'USAGE' +| 'RELOAD' +| 'FILE' +| 'CONFIG' +| 'LOCK' 'TABLES' +| 'EVENT' +| 'SHUTDOWN' + +ObjectType ::= + 'TABLE'? + +PrivLevel ::= + '*' ( '.' '*' )? +| Identifier ( '.' ( '*' | Identifier ) )? + +UserSpecList ::= + UserSpec ( ',' UserSpec )* +``` ## 示例 diff --git a/sql-statements/sql-statement-grant-role.md b/sql-statements/sql-statement-grant-role.md index e4c8c06cfcfe..3ad0c01c0f0e 100644 --- a/sql-statements/sql-statement-grant-role.md +++ b/sql-statements/sql-statement-grant-role.md @@ -9,17 +9,16 @@ summary: TiDB 数据库中 GRANT 的使用概况。 ## 语法图 -**GrantRoleStmt:** +```ebnf+diagram +GrantRoleStmt ::= + 'GRANT' RolenameList 'TO' UsernameList -![GrantRoleStmt](/media/sqlgram/GrantRoleStmt.png) +RolenameList ::= + Rolename ( ',' Rolename )* -**RolenameList:** - -![RolenameList](/media/sqlgram/RolenameList.png) - -**UsernameList:** - -![UsernameList](/media/sqlgram/UsernameList.png) +UsernameList ::= + Username ( ',' Username )* +``` ## 示例 diff --git a/sql-statements/sql-statement-insert.md b/sql-statements/sql-statement-insert.md index dc1a2fcef8ca..b0521aeb8c7f 100644 --- a/sql-statements/sql-statement-insert.md +++ b/sql-statements/sql-statement-insert.md @@ -10,41 +10,37 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-insert/','/docs-cn/dev/refe ## 语法图 -**InsertIntoStmt:** +```ebnf+diagram +InsertIntoStmt ::= + 'INSERT' TableOptimizerHints PriorityOpt IgnoreOptional IntoOpt TableName PartitionNameListOpt InsertValues OnDuplicateKeyUpdate -![InsertIntoStmt](/media/sqlgram/InsertIntoStmt.png) +TableOptimizerHints ::= + hintComment? -**TableOptimizerHints** +PriorityOpt ::= + ( 'LOW_PRIORITY' | 'HIGH_PRIORITY' | 'DELAYED' )? -![TableOptimizerHints](/media/sqlgram/TableOptimizerHints.png) +IgnoreOptional ::= + 'IGNORE'? -**PriorityOpt:** +IntoOpt ::= 'INTO'? -![PriorityOpt](/media/sqlgram/PriorityOpt.png) +TableName ::= + Identifier ( '.' Identifier )? -**IgnoreOptional:** +PartitionNameListOpt ::= + ( 'PARTITION' '(' Identifier ( ',' Identifier )* ')' )? -![IgnoreOptional](/media/sqlgram/IgnoreOptional.png) +InsertValues ::= + '(' ( ColumnNameListOpt ')' ( ValueSym ValuesList | SelectStmt | '(' SelectStmt ')' | UnionStmt ) | SelectStmt ')' ) +| ValueSym ValuesList +| SelectStmt +| UnionStmt +| 'SET' ColumnSetValue? ( ',' ColumnSetValue )* -**IntoOpt:** - -![IntoOpt](/media/sqlgram/IntoOpt.png) - -**TableName:** - -![TableName](/media/sqlgram/TableName.png) - -**PartitionNameListOpt:** - -![PartitionNameListOpt](/media/sqlgram/PartitionNameListOpt.png) - -**InsertValues:** - -![InsertValues](/media/sqlgram/InsertValues.png) - -**OnDuplicateKeyUpdate:** - -![OnDuplicateKeyUpdate](/media/sqlgram/OnDuplicateKeyUpdate.png) +OnDuplicateKeyUpdate ::= + ( 'ON' 'DUPLICATE' 'KEY' 'UPDATE' AssignmentList )? +``` ## 示例 diff --git a/sql-statements/sql-statement-kill.md b/sql-statements/sql-statement-kill.md index 1f6aaa3e13b4..84e37def0bba 100644 --- a/sql-statements/sql-statement-kill.md +++ b/sql-statements/sql-statement-kill.md @@ -10,13 +10,11 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-kill/','/docs-cn/dev/refere ## 语法图 -**KillStmt:** +```ebnf+diagram +KillStmt ::= KillOrKillTiDB ( 'CONNECTION' | 'QUERY' )? NUM -![KillStmt](/media/sqlgram/KillStmt.png) - -**KillOrKillTiDB:** - -![KillOrKillTiDB](/media/sqlgram/KillOrKillTiDB.png) +KillOrKillTiDB ::= 'KILL' 'TIDB'? +``` ## 示例 diff --git a/sql-statements/sql-statement-load-data.md b/sql-statements/sql-statement-load-data.md index 97f9ec79e8ed..49b1f1542bbd 100644 --- a/sql-statements/sql-statement-load-data.md +++ b/sql-statements/sql-statement-load-data.md @@ -10,9 +10,10 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-load-data/','/docs-cn/dev/r ## 语法图 -**LoadDataStmt:** - -![LoadDataStmt](/media/sqlgram/LoadDataStmt.png) +```ebnf+diagram +LoadDataStmt ::= + 'LOAD' 'DATA' LocalOpt 'INFILE' stringLit DuplicateOpt 'INTO' 'TABLE' TableName CharsetOpt Fields Lines IgnoreLines ColumnNameOrUserVarListOptWithBrackets LoadDataSetSpecOpt +``` ## 参数说明 diff --git a/sql-statements/sql-statement-load-stats.md b/sql-statements/sql-statement-load-stats.md index ead8c49b2a0a..87e0bc5202b1 100644 --- a/sql-statements/sql-statement-load-stats.md +++ b/sql-statements/sql-statement-load-stats.md @@ -10,9 +10,10 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-load-stats/'] ## 语法图 -**LoadStatsStmt:** - -![LoadStatsStmt](/media/sqlgram/LoadStatsStmt.png) +```ebnf+diagram +LoadStatsStmt ::= + 'LOAD' 'STATS' stringLit +``` ## 参数说明 diff --git a/sql-statements/sql-statement-modify-column.md b/sql-statements/sql-statement-modify-column.md index e699b6d46dd7..e21e270d1c85 100644 --- a/sql-statements/sql-statement-modify-column.md +++ b/sql-statements/sql-statement-modify-column.md @@ -10,25 +10,41 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-modify-column/','/docs-cn/d ## 语法图 -**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) +```ebnf+diagram +AlterTableStmt ::= + 'ALTER' IgnoreOptional 'TABLE' TableName ( AlterTableSpecListOpt AlterTablePartitionOpt | 'ANALYZE' 'PARTITION' PartitionNameList ( 'INDEX' IndexNameList )? AnalyzeOptionListOpt ) + +AlterTableSpec ::= + TableOptionList +| 'SET' 'TIFLASH' 'REPLICA' LengthNum LocationLabelList +| 'CONVERT' 'TO' CharsetKw ( CharsetName | 'DEFAULT' ) OptCollate +| 'ADD' ( ColumnKeywordOpt IfNotExists ( ColumnDef ColumnPosition | '(' TableElementList ')' ) | Constraint | 'PARTITION' IfNotExists NoWriteToBinLogAliasOpt ( PartitionDefinitionListOpt | 'PARTITIONS' NUM ) ) +| ( ( 'CHECK' | 'TRUNCATE' ) 'PARTITION' | ( 'OPTIMIZE' | 'REPAIR' | 'REBUILD' ) 'PARTITION' NoWriteToBinLogAliasOpt ) AllOrPartitionNameList +| 'COALESCE' 'PARTITION' NoWriteToBinLogAliasOpt NUM +| 'DROP' ( ColumnKeywordOpt IfExists ColumnName RestrictOrCascadeOpt | 'PRIMARY' 'KEY' | 'PARTITION' IfExists PartitionNameList | ( KeyOrIndex IfExists | 'CHECK' ) Identifier | 'FOREIGN' 'KEY' IfExists Symbol ) +| 'EXCHANGE' 'PARTITION' Identifier 'WITH' 'TABLE' TableName WithValidationOpt +| ( 'IMPORT' | 'DISCARD' ) ( 'PARTITION' AllOrPartitionNameList )? 'TABLESPACE' +| 'REORGANIZE' 'PARTITION' NoWriteToBinLogAliasOpt ReorganizePartitionRuleOpt +| 'ORDER' 'BY' AlterOrderItem ( ',' AlterOrderItem )* +| ( 'DISABLE' | 'ENABLE' ) 'KEYS' +| ( 'MODIFY' ColumnKeywordOpt IfExists | 'CHANGE' ColumnKeywordOpt IfExists ColumnName ) ColumnDef ColumnPosition +| 'ALTER' ( ColumnKeywordOpt ColumnName ( 'SET' 'DEFAULT' ( SignedLiteral | '(' Expression ')' ) | 'DROP' 'DEFAULT' ) | 'CHECK' Identifier EnforcedOrNot | 'INDEX' Identifier IndexInvisible ) +| 'RENAME' ( ( 'COLUMN' | KeyOrIndex ) Identifier 'TO' Identifier | ( 'TO' | '='? | 'AS' ) TableName ) +| LockClause +| AlgorithmClause +| 'FORCE' +| ( 'WITH' | 'WITHOUT' ) 'VALIDATION' +| 'SECONDARY_LOAD' +| 'SECONDARY_UNLOAD' + +ColumnKeywordOpt ::= 'COLUMN'? + +ColumnDef ::= + ColumnName ( Type | 'SERIAL' ) ColumnOptionListOpt + +ColumnPosition ::= + ( 'FIRST' | 'AFTER' ColumnName )? +``` ## 示例 diff --git a/sql-statements/sql-statement-prepare.md b/sql-statements/sql-statement-prepare.md index 978e46fe1519..5e98c70c1947 100644 --- a/sql-statements/sql-statement-prepare.md +++ b/sql-statements/sql-statement-prepare.md @@ -10,13 +10,14 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-prepare/','/docs-cn/dev/ref ## 语法图 -**PreparedStmt:** +```ebnf+diagram +PreparedStmt ::= + 'PREPARE' Identifier 'FROM' PrepareSQL -![PreparedStmt](/media/sqlgram/PreparedStmt.png) - -**PrepareSQL:** - -![PrepareSQL](/media/sqlgram/PrepareSQL.png) +PrepareSQL ::= + stringLit +| UserVariable +``` ## 示例 diff --git a/sql-statements/sql-statement-recover-table.md b/sql-statements/sql-statement-recover-table.md index f7a35e19e718..3c5a45757adc 100644 --- a/sql-statements/sql-statement-recover-table.md +++ b/sql-statements/sql-statement-recover-table.md @@ -23,21 +23,17 @@ RECOVER TABLE BY JOB ddl_job_id ### 语法图 -**RecoverTableStmt:** +```ebnf+diagram +RecoverTableStmt ::= + 'RECOVER' 'TABLE' ( 'BY' 'JOB' Int64Num | TableName Int64Num? ) -![RecoverTableStmt](/media/sqlgram/RecoverTableStmt.png) +TableName ::= + Identifier ( '.' Identifier )? -**TableName:** +Int64Num ::= NUM -![TableName](/media/sqlgram/TableName.png) - -**Int64Num:** - -![Int64Num](/media/sqlgram/Int64Num.png) - -**NUM:** - -![NUM](/media/sqlgram/NUM.png) +NUM ::= intLit +``` ## 注意事项 diff --git a/sql-statements/sql-statement-rename-index.md b/sql-statements/sql-statement-rename-index.md index 4bbca968f46c..78d00c921edd 100644 --- a/sql-statements/sql-statement-rename-index.md +++ b/sql-statements/sql-statement-rename-index.md @@ -10,13 +10,14 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-rename-index/','/docs-cn/de ## 语法图 -**AlterTableStmt:** +```ebnf+diagram +AlterTableStmt ::= + 'ALTER' IgnoreOptional 'TABLE' TableName ( AlterTableSpecListOpt AlterTablePartitionOpt | 'ANALYZE' 'PARTITION' PartitionNameList ( 'INDEX' IndexNameList )? AnalyzeOptionListOpt ) -![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) - -**KeyOrIndex:** - -![KeyOrIndex](/media/sqlgram/KeyOrIndex.png) +KeyOrIndex ::= + 'KEY' +| 'INDEX' +``` ## 示例 diff --git a/sql-statements/sql-statement-rename-table.md b/sql-statements/sql-statement-rename-table.md index f9daf4d9553c..f1257f5fdd76 100644 --- a/sql-statements/sql-statement-rename-table.md +++ b/sql-statements/sql-statement-rename-table.md @@ -10,13 +10,13 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-rename-table/','/docs-cn/de ## 语法图 -**RenameTableStmt:** +```ebnf+diagram +RenameTableStmt ::= + 'RENAME' 'TABLE' TableToTable ( ',' TableToTable )* -![RenameTableStmt](/media/sqlgram/RenameTableStmt.png) - -**TableToTable:** - -![TableToTable](/media/sqlgram/TableToTable.png) +TableToTable ::= + TableName 'TO' TableName +``` ## 示例 diff --git a/sql-statements/sql-statement-replace.md b/sql-statements/sql-statement-replace.md index dcf1939950ee..2649b29b0330 100644 --- a/sql-statements/sql-statement-replace.md +++ b/sql-statements/sql-statement-replace.md @@ -10,29 +10,30 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-replace/','/docs-cn/dev/ref ## 语法图 -**ReplaceIntoStmt:** +```ebnf+diagram +ReplaceIntoStmt ::= + 'REPLACE' PriorityOpt IntoOpt TableName PartitionNameListOpt InsertValues -![ReplaceIntoStmt](/media/sqlgram/ReplaceIntoStmt.png) +PriorityOpt ::= + ( 'LOW_PRIORITY' | 'HIGH_PRIORITY' | 'DELAYED' )? -**PriorityOpt:** +IntoOpt ::= 'INTO'? -![PriorityOpt](/media/sqlgram/PriorityOpt.png) +TableName ::= + Identifier ( '.' Identifier )? -**IntoOpt:** +PartitionNameListOpt ::= + ( 'PARTITION' '(' Identifier ( ',' Identifier )* ')' )? -![IntoOpt](/media/sqlgram/IntoOpt.png) +InsertValues ::= + '(' ( ColumnNameListOpt ')' ( ValueSym ValuesList | SelectStmt | '(' SelectStmt ')' | UnionStmt ) | SelectStmt ')' ) +| ValueSym ValuesList +| SelectStmt +| UnionStmt +| 'SET' ColumnSetValue? ( ',' ColumnSetValue )* -**TableName:** -![TableName](/media/sqlgram/TableName.png) - -**PartitionNameListOpt:** - -![PartitionNameListOpt](/media/sqlgram/PartitionNameListOpt.png) - -**InsertValues:** - -![InsertValues](/media/sqlgram/InsertValues.png) +``` ## 示例 diff --git a/sql-statements/sql-statement-revoke-privileges.md b/sql-statements/sql-statement-revoke-privileges.md index 5a38a0944c1b..6ce86492c4c5 100644 --- a/sql-statements/sql-statement-revoke-privileges.md +++ b/sql-statements/sql-statement-revoke-privileges.md @@ -10,33 +10,52 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-revoke-privileges/','/docs- ## 语法图 -**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) +```ebnf+diagram +GrantStmt ::= + 'GRANT' PrivElemList 'ON' ObjectType PrivLevel 'TO' UserSpecList RequireClauseOpt WithGrantOptionOpt + +PrivElemList ::= + PrivElem ( ',' PrivElem )* + +PrivElem ::= + PrivType ( '(' ColumnNameList ')' )? + +PrivType ::= + 'ALL' 'PRIVILEGES'? +| 'ALTER' 'ROUTINE'? +| 'CREATE' ( 'USER' | 'TEMPORARY' 'TABLES' | 'VIEW' | 'ROLE' | 'ROUTINE' )? +| 'TRIGGER' +| 'DELETE' +| 'DROP' 'ROLE'? +| 'PROCESS' +| 'EXECUTE' +| 'INDEX' +| 'INSERT' +| 'SELECT' +| 'SUPER' +| 'SHOW' ( 'DATABASES' | 'VIEW' ) +| 'UPDATE' +| 'GRANT' 'OPTION' +| 'REFERENCES' +| 'REPLICATION' ( 'SLAVE' | 'CLIENT' ) +| 'USAGE' +| 'RELOAD' +| 'FILE' +| 'CONFIG' +| 'LOCK' 'TABLES' +| 'EVENT' +| 'SHUTDOWN' + +ObjectType ::= + 'TABLE'? + +PrivLevel ::= + '*' ( '.' '*' )? +| Identifier ( '.' ( '*' | Identifier ) )? + +UserSpecList ::= + UserSpec ( ',' UserSpec )* +``` ## 示例 diff --git a/sql-statements/sql-statement-revoke-role.md b/sql-statements/sql-statement-revoke-role.md index f570ace4cd97..8e3362a21bcf 100644 --- a/sql-statements/sql-statement-revoke-role.md +++ b/sql-statements/sql-statement-revoke-role.md @@ -9,17 +9,16 @@ summary: TiDB 数据库中 REVOKE 的使用概况。 ## 语法图 -**RevokeRoleStmt:** +```ebnf+diagram +RevokeRoleStmt ::= + 'REVOKE' RolenameList 'FROM' UsernameList -![RevokeRoleStmt](/media/sqlgram/RevokeRoleStmt.png) +RolenameList ::= + Rolename ( ',' Rolename )* -**RolenameList:** - -![RolenameList](/media/sqlgram/RolenameList.png) - -**UsernameList:** - -![UsernameList](/media/sqlgram/UsernameList.png) +UsernameList ::= + Username ( ',' Username )* +``` ## 示例 diff --git a/sql-statements/sql-statement-rollback.md b/sql-statements/sql-statement-rollback.md index e95625cece90..f98df3d7d777 100644 --- a/sql-statements/sql-statement-rollback.md +++ b/sql-statements/sql-statement-rollback.md @@ -10,13 +10,14 @@ aliases: ['/docs-cn/dev/sql-statements/sql-statement-rollback/','/docs-cn/dev/re ## 语法图 -**RollbackStmt:** +```ebnf+diagram +RollbackStmt ::= + 'ROLLBACK' CompletionTypeWithinTransaction? -![RollbackStmt](/media/sqlgram/RollbackStmt.png) - -**CompletionTypeWithinTransaction:** - -![CompletionTypeWithinTransaction](/media/sqlgram/CompletionTypeWithinTransaction.png) +CompletionTypeWithinTransaction ::= + 'AND' ( 'CHAIN' ( 'NO' 'RELEASE' )? | 'NO' 'CHAIN' ( 'NO'? 'RELEASE' )? ) +| 'NO'? 'RELEASE' +``` ## 示例