From c9f3d323f4669a3f218936d4a8ff151d37964b11 Mon Sep 17 00:00:00 2001 From: Charlotte Liu <37295236+CharLotteiu@users.noreply.github.com> Date: Fri, 30 Apr 2021 10:49:50 +0800 Subject: [PATCH] cherry pick #5554 to release-4.0 Signed-off-by: ti-srebot --- sql-statements/sql-statement-execute.md | 7 +- .../sql-statement-explain-analyze.md | 28 ++++--- sql-statements/sql-statement-explain.md | 28 ++++--- .../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 | 35 +++++---- .../sql-statement-revoke-privileges.md | 73 ++++++++++++------- sql-statements/sql-statement-revoke-role.md | 17 ++--- sql-statements/sql-statement-rollback.md | 13 ++-- 22 files changed, 328 insertions(+), 261 deletions(-) diff --git a/sql-statements/sql-statement-execute.md b/sql-statements/sql-statement-execute.md index 9375657bb94da..630a444c6c00c 100644 --- a/sql-statements/sql-statement-execute.md +++ b/sql-statements/sql-statement-execute.md @@ -10,9 +10,10 @@ The `EXECUTE` statement provides an SQL interface to server-side prepared statem ## Synopsis -**ExecuteStmt:** - -![ExecuteStmt](/media/sqlgram/ExecuteStmt.png) +```ebnf+diagram +ExecuteStmt ::= + 'EXECUTE' Identifier ( 'USING' UserVariable ( ',' UserVariable )* )? +``` ## Examples diff --git a/sql-statements/sql-statement-explain-analyze.md b/sql-statements/sql-statement-explain-analyze.md index 17cbeca79e4a8..3e9cbf10a63b8 100644 --- a/sql-statements/sql-statement-explain-analyze.md +++ b/sql-statements/sql-statement-explain-analyze.md @@ -14,17 +14,23 @@ The `EXPLAIN ANALYZE` statement works similar to `EXPLAIN`, with the major diffe ## Synopsis -**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 output format diff --git a/sql-statements/sql-statement-explain.md b/sql-statements/sql-statement-explain.md index 84b8a0418d80c..11099de422452 100644 --- a/sql-statements/sql-statement-explain.md +++ b/sql-statements/sql-statement-explain.md @@ -14,17 +14,23 @@ TiDB supports the `EXPLAIN [options] FOR CONNECTION connection_id` statement. Ho ## Synopsis -**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` output format diff --git a/sql-statements/sql-statement-flashback-table.md b/sql-statements/sql-statement-flashback-table.md index 53699525b882a..2f4c35055b78e 100644 --- a/sql-statements/sql-statement-flashback-table.md +++ b/sql-statements/sql-statement-flashback-table.md @@ -26,17 +26,16 @@ FLASHBACK TABLE table_name [TO other_table_name] ## Synopsis -**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 )? +``` ## Notes diff --git a/sql-statements/sql-statement-flush-privileges.md b/sql-statements/sql-statement-flush-privileges.md index 9327f606aff20..006f0c27d8a59 100644 --- a/sql-statements/sql-statement-flush-privileges.md +++ b/sql-statements/sql-statement-flush-privileges.md @@ -10,17 +10,21 @@ This statement triggers TiDB to reload the in-memory copy of privileges from the ## Synopsis -**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 +``` ## Examples diff --git a/sql-statements/sql-statement-flush-status.md b/sql-statements/sql-statement-flush-status.md index c9c445dfbd2d9..9d2dbf3cb225e 100644 --- a/sql-statements/sql-statement-flush-status.md +++ b/sql-statements/sql-statement-flush-status.md @@ -10,17 +10,21 @@ This statement is included for compatibility with MySQL. It has no effect on TiD ## Synopsis -**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 +``` ## Examples diff --git a/sql-statements/sql-statement-flush-tables.md b/sql-statements/sql-statement-flush-tables.md index 1d89b17860979..43cf2155dd04b 100644 --- a/sql-statements/sql-statement-flush-tables.md +++ b/sql-statements/sql-statement-flush-tables.md @@ -10,33 +10,34 @@ This statement is included for compatibility with MySQL. It has no effective usa ## Synopsis -**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' )? +``` ## Examples diff --git a/sql-statements/sql-statement-grant-privileges.md b/sql-statements/sql-statement-grant-privileges.md index 85b709f4c8904..ff9ca2cc790c4 100644 --- a/sql-statements/sql-statement-grant-privileges.md +++ b/sql-statements/sql-statement-grant-privileges.md @@ -10,33 +10,52 @@ This statement allocates privileges to a pre-existing user in TiDB. The privileg ## Synopsis -**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 )* +``` ## Examples diff --git a/sql-statements/sql-statement-grant-role.md b/sql-statements/sql-statement-grant-role.md index 779c202b347b5..a2cac8ae67dc4 100644 --- a/sql-statements/sql-statement-grant-role.md +++ b/sql-statements/sql-statement-grant-role.md @@ -9,17 +9,16 @@ Assigns a previously created role to an existing user. The user can use then use ## Synopsis -**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 )* +``` ## Examples diff --git a/sql-statements/sql-statement-insert.md b/sql-statements/sql-statement-insert.md index 662575d748a61..95ebd1d5663e0 100644 --- a/sql-statements/sql-statement-insert.md +++ b/sql-statements/sql-statement-insert.md @@ -10,41 +10,37 @@ This statement inserts new rows into a table. ## Synopsis -**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 )? +``` ## Examples diff --git a/sql-statements/sql-statement-kill.md b/sql-statements/sql-statement-kill.md index 6a94da16bf4af..2e208ed4006e6 100644 --- a/sql-statements/sql-statement-kill.md +++ b/sql-statements/sql-statement-kill.md @@ -10,13 +10,11 @@ The statement `KILL TIDB` is used to terminate connections in TiDB. ## Synopsis -**KillStmt:** +```ebnf+diagram +KillStmt ::= KillOrKillTiDB ( 'CONNECTION' | 'QUERY' )? NUM -![KillStmt](/media/sqlgram/KillStmt.png) - -**KillOrKillTiDB:** - -![KillOrKillTiDB](/media/sqlgram/KillOrKillTiDB.png) +KillOrKillTiDB ::= 'KILL' 'TIDB'? +``` ## Examples diff --git a/sql-statements/sql-statement-load-data.md b/sql-statements/sql-statement-load-data.md index 9dd11b5584a48..2e9d349743125 100644 --- a/sql-statements/sql-statement-load-data.md +++ b/sql-statements/sql-statement-load-data.md @@ -10,9 +10,10 @@ The `LOAD DATA` statement batch loads data into a TiDB table. ## Synopsis -**LoadDataStmt:** - -![LoadDataStmt](/media/sqlgram/LoadDataStmt.png) +```ebnf+diagram +LoadDataStmt ::= + 'LOAD' 'DATA' LocalOpt 'INFILE' stringLit DuplicateOpt 'INTO' 'TABLE' TableName CharsetOpt Fields Lines IgnoreLines ColumnNameOrUserVarListOptWithBrackets LoadDataSetSpecOpt +``` ## Parameters diff --git a/sql-statements/sql-statement-load-stats.md b/sql-statements/sql-statement-load-stats.md index 04bd6cfa4e241..51d01af4ddef9 100644 --- a/sql-statements/sql-statement-load-stats.md +++ b/sql-statements/sql-statement-load-stats.md @@ -10,9 +10,10 @@ The `LOAD STATS` statement is used to load the statistics into TiDB. ## Synopsis -**LoadStatsStmt:** - -![LoadStatsStmt](/media/sqlgram/LoadStatsStmt.png) +```ebnf+diagram +LoadStatsStmt ::= + 'LOAD' 'STATS' stringLit +``` ## Examples diff --git a/sql-statements/sql-statement-modify-column.md b/sql-statements/sql-statement-modify-column.md index 0c59aaf68d68e..e1fc54613920b 100644 --- a/sql-statements/sql-statement-modify-column.md +++ b/sql-statements/sql-statement-modify-column.md @@ -10,25 +10,41 @@ The `ALTER TABLE.. MODIFY COLUMN` statement modifies a column on an existing tab ## Synopsis -**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 )? +``` ## Examples diff --git a/sql-statements/sql-statement-prepare.md b/sql-statements/sql-statement-prepare.md index 38030eada45f8..257602f75c45d 100644 --- a/sql-statements/sql-statement-prepare.md +++ b/sql-statements/sql-statement-prepare.md @@ -10,13 +10,14 @@ The `PREPARE` statement provides an SQL interface to server-side prepared statem ## Synopsis -**PreparedStmt:** +```ebnf+diagram +PreparedStmt ::= + 'PREPARE' Identifier 'FROM' PrepareSQL -![PreparedStmt](/media/sqlgram/PreparedStmt.png) - -**PrepareSQL:** - -![PrepareSQL](/media/sqlgram/PrepareSQL.png) +PrepareSQL ::= + stringLit +| UserVariable +``` ## Examples diff --git a/sql-statements/sql-statement-recover-table.md b/sql-statements/sql-statement-recover-table.md index 4c1890ad66343..13a8f4651087a 100644 --- a/sql-statements/sql-statement-recover-table.md +++ b/sql-statements/sql-statement-recover-table.md @@ -24,21 +24,17 @@ RECOVER TABLE BY JOB ddl_job_id ## Synopsis -**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 +``` > **Note:** > diff --git a/sql-statements/sql-statement-rename-index.md b/sql-statements/sql-statement-rename-index.md index c3ee8ab316e79..96db5d8bda640 100644 --- a/sql-statements/sql-statement-rename-index.md +++ b/sql-statements/sql-statement-rename-index.md @@ -10,13 +10,14 @@ The statement `ALTER TABLE .. RENAME INDEX` renames an existing index to a new n ## Synopsis -**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' +``` ## Examples diff --git a/sql-statements/sql-statement-rename-table.md b/sql-statements/sql-statement-rename-table.md index a6920058e9c5a..e44da6d87316b 100644 --- a/sql-statements/sql-statement-rename-table.md +++ b/sql-statements/sql-statement-rename-table.md @@ -10,13 +10,13 @@ This statement renames an existing table to a new name. ## Synopsis -**RenameTableStmt:** +```ebnf+diagram +RenameTableStmt ::= + 'RENAME' 'TABLE' TableToTable ( ',' TableToTable )* -![RenameTableStmt](/media/sqlgram/RenameTableStmt.png) - -**TableToTable:** - -![TableToTable](/media/sqlgram/TableToTable.png) +TableToTable ::= + TableName 'TO' TableName +``` ## Examples diff --git a/sql-statements/sql-statement-replace.md b/sql-statements/sql-statement-replace.md index 532519d462154..1fd9b5cd8ec68 100644 --- a/sql-statements/sql-statement-replace.md +++ b/sql-statements/sql-statement-replace.md @@ -10,29 +10,28 @@ The `REPLACE` statement is semantically a combined `DELETE`+`INSERT` statement. ## Synopsis -**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) - -**TableName:** - -![TableName](/media/sqlgram/TableName.png) - -**PartitionNameListOpt:** - -![PartitionNameListOpt](/media/sqlgram/PartitionNameListOpt.png) - -**InsertValues:** - -![InsertValues](/media/sqlgram/InsertValues.png) +InsertValues ::= + '(' ( ColumnNameListOpt ')' ( ValueSym ValuesList | SelectStmt | '(' SelectStmt ')' | UnionStmt ) | SelectStmt ')' ) +| ValueSym ValuesList +| SelectStmt +| UnionStmt +| 'SET' ColumnSetValue? ( ',' ColumnSetValue )* +``` ## Examples diff --git a/sql-statements/sql-statement-revoke-privileges.md b/sql-statements/sql-statement-revoke-privileges.md index 2cf7f3452674b..b67774b8e9477 100644 --- a/sql-statements/sql-statement-revoke-privileges.md +++ b/sql-statements/sql-statement-revoke-privileges.md @@ -10,33 +10,52 @@ This statement removes privileges from an existing user. Executing this statemen ## Synopsis -**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 )* +``` ## Examples diff --git a/sql-statements/sql-statement-revoke-role.md b/sql-statements/sql-statement-revoke-role.md index f0c8627675b79..75878257422ed 100644 --- a/sql-statements/sql-statement-revoke-role.md +++ b/sql-statements/sql-statement-revoke-role.md @@ -9,17 +9,16 @@ This statement removes a previously assigned role from a specified user (or list ## Synopsis -**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 )* +``` ## Examples diff --git a/sql-statements/sql-statement-rollback.md b/sql-statements/sql-statement-rollback.md index d342f4c888bf0..ba13d04ea8666 100644 --- a/sql-statements/sql-statement-rollback.md +++ b/sql-statements/sql-statement-rollback.md @@ -10,13 +10,14 @@ This statement reverts all changes in the current transaction inside of TIDB. I ## Synopsis -**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' +``` ## Examples