From bc1899a4cb5c1e01d486fc9154654cb18c7def75 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 27 Jan 2021 11:30:03 +0800 Subject: [PATCH] cherry pick #5376 to release-4.0 (#5409) Signed-off-by: ti-srebot Co-authored-by: Charlotte Liu <37295236+CharLotteiu@users.noreply.github.com> --- sql-statements/sql-statement-alter-table.md | 2 +- sql-statements/sql-statement-begin.md | 8 +- sql-statements/sql-statement-change-column.md | 55 +++++--- sql-statements/sql-statement-commit.md | 13 +- .../sql-statement-create-binding.md | 17 ++- .../sql-statement-create-database.md | 22 ++- sql-statements/sql-statement-create-index.md | 83 +++++------ sql-statements/sql-statement-create-role.md | 17 ++- .../sql-statement-create-sequence.md | 48 +++---- .../sql-statement-create-table-like.md | 13 +- sql-statements/sql-statement-create-table.md | 130 ++++++++++-------- sql-statements/sql-statement-create-user.md | 33 ++--- sql-statements/sql-statement-create-view.md | 41 +++--- sql-statements/sql-statement-deallocate.md | 25 ++-- sql-statements/sql-statement-delete.md | 7 +- sql-statements/sql-statement-do.md | 18 +-- sql-statements/sql-statement-drop-binding.md | 17 ++- sql-statements/sql-statement-drop-column.md | 41 ++++-- sql-statements/sql-statement-drop-database.md | 11 +- sql-statements/sql-statement-drop-index.md | 32 ++--- sql-statements/sql-statement-drop-role.md | 12 +- sql-statements/sql-statement-drop-sequence.md | 21 ++- sql-statements/sql-statement-drop-stats.md | 12 +- sql-statements/sql-statement-drop-table.md | 18 +-- sql-statements/sql-statement-drop-user.md | 12 +- sql-statements/sql-statement-drop-view.md | 17 ++- 26 files changed, 376 insertions(+), 349 deletions(-) diff --git a/sql-statements/sql-statement-alter-table.md b/sql-statements/sql-statement-alter-table.md index 45ffd0713474..27e37b912325 100644 --- a/sql-statements/sql-statement-alter-table.md +++ b/sql-statements/sql-statement-alter-table.md @@ -35,7 +35,7 @@ AlterTableSpec ::= | ( '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 ) +| 'RENAME' ( ( 'COLUMN' | KeyOrIndex ) Identifier 'TO' Identifier | ( 'TO' | '='? | 'AS' ) TableName ) | LockClause | AlgorithmClause | 'FORCE' diff --git a/sql-statements/sql-statement-begin.md b/sql-statements/sql-statement-begin.md index 7aa321bc1273..9417f83dc1ee 100644 --- a/sql-statements/sql-statement-begin.md +++ b/sql-statements/sql-statement-begin.md @@ -12,9 +12,11 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-begin/','/docs-cn/v4.0/s ## 语法图 -**BeginTransactionStmt:** - -![BeginTransactionStmt](/media/sqlgram/BeginTransactionStmt.png) +```ebnf+diagram +BeginTransactionStmt ::= + 'BEGIN' ( 'PESSIMISTIC' | 'OPTIMISTIC' )? +| 'START' 'TRANSACTION' ( 'READ' ( 'WRITE' | 'ONLY' ( 'WITH' 'TIMESTAMP' 'BOUND' TimestampBound )? ) | 'WITH' 'CONSISTENT' 'SNAPSHOT' )? +``` ## 示例 diff --git a/sql-statements/sql-statement-change-column.md b/sql-statements/sql-statement-change-column.md index 671866a099a5..e0c1a47bdb51 100644 --- a/sql-statements/sql-statement-change-column.md +++ b/sql-statements/sql-statement-change-column.md @@ -10,25 +10,42 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-change-column/','/docs-c ## 语法图 -**AlterTableStmt:** - -![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) - -**AlterTableSpec:** - -![AlterTableSpec](/media/sqlgram/AlterTableSpec.png) - -**ColumnName:** - -![ColumnName](/media/sqlgram/ColumnName.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' + +ColumnName ::= + Identifier ( '.' Identifier ( '.' Identifier )? )? + +ColumnDef ::= + ColumnName ( Type | 'SERIAL' ) ColumnOptionListOpt + +ColumnPosition ::= + ( 'FIRST' | 'AFTER' ColumnName )? +``` ## 示例 diff --git a/sql-statements/sql-statement-commit.md b/sql-statements/sql-statement-commit.md index ecbad5de0740..af3953faf3ed 100644 --- a/sql-statements/sql-statement-commit.md +++ b/sql-statements/sql-statement-commit.md @@ -12,13 +12,14 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-commit/','/docs-cn/v4.0/ ## 语法图 -**CommitStmt:** +```ebnf+diagram +CommitStmt ::= + 'COMMIT' CompletionTypeWithinTransaction? -![CommitStmt](/media/sqlgram/CommitStmt.png) - -**CompletionTypeWithinTransaction:** - -![CompletionTypeWithinTransaction](/media/sqlgram/CompletionTypeWithinTransaction.png) +CompletionTypeWithinTransaction ::= + 'AND' ( 'CHAIN' ( 'NO' 'RELEASE' )? | 'NO' 'CHAIN' ( 'NO'? 'RELEASE' )? ) +| 'NO'? 'RELEASE' +``` ## 示例 diff --git a/sql-statements/sql-statement-create-binding.md b/sql-statements/sql-statement-create-binding.md index 8c9d92cc346d..2468e175551a 100644 --- a/sql-statements/sql-statement-create-binding.md +++ b/sql-statements/sql-statement-create-binding.md @@ -14,17 +14,16 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-create-binding/','/docs- ## 语法图 -**CreateBindingStmt:** +```ebnf+diagram +CreateBindingStmt ::= + 'CREATE' GlobalScope 'BINDING' 'FOR' SelectStmt 'USING' SelectStmt -![CreateBindingStmt](/media/sqlgram/CreateBindingStmt.png) +GlobalScope ::= + ( 'GLOBAL' | 'SESSION' )? -**GlobalScope:** - -![GlobalScope](/media/sqlgram/GlobalScope.png) - -**SelectStmt** - -![SelectStmt](/media/sqlgram/SelectStmt.png) +SelectStmt ::= + ( SelectStmtBasic | SelectStmtFromDualTable | SelectStmtFromTable ) OrderByOptional SelectStmtLimit SelectLockOpt SelectStmtIntoOption +``` **** diff --git a/sql-statements/sql-statement-create-database.md b/sql-statements/sql-statement-create-database.md index 60bef3640b0d..78a22a7a08cc 100644 --- a/sql-statements/sql-statement-create-database.md +++ b/sql-statements/sql-statement-create-database.md @@ -10,21 +10,19 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-create-database/','/docs ## 语法图 -**CreateDatabaseStmt:** +```ebnf+diagram +CreateDatabaseStmt ::= + 'CREATE' 'DATABASE' IfNotExists DBName DatabaseOptionListOpt -![CreateDaatabaseStmt](/media/sqlgram/CreateDatabaseStmt.png) +IfNotExists ::= + ( 'IF' 'NOT' 'EXISTS' )? -**IfNotExists:** +DBName ::= + Identifier -![IfNotExists](/media/sqlgram/IfNotExists.png) - -**DBName:** - -![DBName](/media/sqlgram/DBName.png) - -**DatabaseOptionListOpt:** - -![DatabaseOptionListOpt](/media/sqlgram/DatabaseOptionListOpt.png) +DatabaseOptionListOpt ::= + DatabaseOptionList? +``` ## 语法说明 diff --git a/sql-statements/sql-statement-create-index.md b/sql-statements/sql-statement-create-index.md index 368bb2bed8f3..89576b77b34c 100644 --- a/sql-statements/sql-statement-create-index.md +++ b/sql-statements/sql-statement-create-index.md @@ -10,65 +10,58 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-create-index/','/docs-cn ## 语法图 -**CreateIndexStmt:** +```ebnf+diagram +CreateIndexStmt ::= + 'CREATE' IndexKeyTypeOpt 'INDEX' IfNotExists Identifier IndexTypeOpt 'ON' TableName '(' IndexPartSpecificationList ')' IndexOptionList IndexLockAndAlgorithmOpt -![CreateIndexStmt](/media/sqlgram/CreateIndexStmt.png) +IndexKeyTypeOpt ::= + ( 'UNIQUE' | 'SPATIAL' | 'FULLTEXT' )? -**IndexKeyTypeOpt:** +IfNotExists ::= + ( 'IF' 'NOT' 'EXISTS' )? -![IndexKeyTypeOpt](/media/sqlgram/IndexKeyTypeOpt.png) +IndexTypeOpt ::= + IndexType? -**IfNotExists:** +IndexPartSpecificationList ::= + IndexPartSpecification ( ',' IndexPartSpecification )* -![IfNotExists](/media/sqlgram/IfNotExists.png) +IndexOptionList ::= + IndexOption* -**IndexTypeOpt:** +IndexLockAndAlgorithmOpt ::= + ( LockClause AlgorithmClause? | AlgorithmClause LockClause? )? -![IndexTypeOpt](/media/sqlgram/IndexTypeOpt.png) +IndexType ::= + ( 'USING' | 'TYPE' ) IndexTypeName -**IndexPartSpecificationList:** +IndexPartSpecification ::= + ( ColumnName OptFieldLen | '(' Expression ')' ) Order -![IndexPartSpecificationList](/media/sqlgram/IndexPartSpecificationList.png) +IndexOption ::= + 'KEY_BLOCK_SIZE' '='? LengthNum +| IndexType +| 'WITH' 'PARSER' Identifier +| 'COMMENT' stringLit +| IndexInvisible -**IndexOptionList:** +IndexTypeName ::= + 'BTREE' +| 'HASH' +| 'RTREE' -![IndexOptionList](/media/sqlgram/IndexOptionList.png) +ColumnName ::= + Identifier ( '.' Identifier ( '.' Identifier )? )? -**IndexLockAndAlgorithmOpt:** +OptFieldLen ::= + FieldLen? -![IndexLockAndAlgorithmOpt](/media/sqlgram/IndexLockAndAlgorithmOpt.png) +IndexNameList ::= + ( Identifier | 'PRIMARY' )? ( ',' ( Identifier | 'PRIMARY' ) )* -**IndexType:** - -![IndexType](/media/sqlgram/IndexType.png) - -**IndexPartSpecification:** - -![IndexPartSpecification](/media/sqlgram/IndexPartSpecification.png) - -**IndexOption:** - -![IndexOption](/media/sqlgram/IndexOption.png) - -**IndexTypeName:** - -![IndexTypeName](/media/sqlgram/IndexTypeName.png) - -**ColumnName:** - -![ColumnName](/media/sqlgram/ColumnName.png) - -**OptFieldLen:** - -![OptFieldLen](/media/sqlgram/OptFieldLen.png) - -**IndexNameList:** - -![IndexNameList](/media/sqlgram/IndexNameList.png) - -**KeyOrIndex:** - -![KeyOrIndex](/media/sqlgram/KeyOrIndex.png) +KeyOrIndex ::= + 'Key' | 'Index' +``` ## 示例 diff --git a/sql-statements/sql-statement-create-role.md b/sql-statements/sql-statement-create-role.md index 7645bbfbf52c..6256ce0f533c 100644 --- a/sql-statements/sql-statement-create-role.md +++ b/sql-statements/sql-statement-create-role.md @@ -9,17 +9,16 @@ summary: TiDB 数据库中 CREATE ROLE 的使用概况。 ## 语法图 -**CreateRoleStmt:** +```ebnf+diagram +CreateRoleStmt ::= + 'CREATE' 'ROLE' IfNotExists RoleSpec (',' RoleSpec)* -![CreateRoleStmt](/media/sqlgram/CreateRoleStmt.png) +IfNotExists ::= + ('IF' 'NOT' 'EXISTS')? -**IfNotExists:** - -![IfNotExists](/media/sqlgram/IfNotExists.png) - -**RoleSpec:** - -![RoleSpec](/media/sqlgram/RoleSpec.png) +RoleSpec ::= + Rolename +``` ## 示例 diff --git a/sql-statements/sql-statement-create-sequence.md b/sql-statements/sql-statement-create-sequence.md index fad5347df5ee..c2422843b9bc 100644 --- a/sql-statements/sql-statement-create-sequence.md +++ b/sql-statements/sql-statement-create-sequence.md @@ -10,29 +10,31 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-create-sequence/','/docs ## 语法图 -**CreateSequenceStmt:** - -![CreateSequenceStmt](/media/sqlgram/CreateSequenceStmt.png) - -**IfNotExists:** - -![IfNotExists](/media/sqlgram/IfNotExists.png) - -**TableName:** - -![TableName](/media/sqlgram/TableName.png) - -**CreateSequenceOptionListOpt:** - -![CreateSequenceOptionListOpt](/media/sqlgram/CreateSequenceOptionListOpt.png) - -**SequenceOptionList:** - -![SequenceOptionList](/media/sqlgram/SequenceOptionList.png) - -**SequenceOption:** - -![SequenceOption](/media/sqlgram/SequenceOption.png) +```ebnf+diagram +CreateSequenceStmt ::= + 'CREATE' 'SEQUENCE' IfNotExists TableName CreateSequenceOptionListOpt CreateTableOptionListOpt + +IfNotExists ::= + ('IF' 'NOT' 'EXISTS')? + +TableName ::= + Identifier ('.' Identifier)? + +CreateSequenceOptionListOpt ::= + SequenceOption* + +SequenceOptionList ::= + SequenceOption + +SequenceOption ::= + ( 'INCREMENT' ( '='? | 'BY' ) | 'START' ( '='? | 'WITH' ) | ( 'MINVALUE' | 'MAXVALUE' | 'CACHE' ) '='? ) SignedNum +| 'NOMINVALUE' +| 'NO' ( 'MINVALUE' | 'MAXVALUE' | 'CACHE' | 'CYCLE' ) +| 'NOMAXVALUE' +| 'NOCACHE' +| 'CYCLE' +| 'NOCYCLE' +``` ## 语法说明 diff --git a/sql-statements/sql-statement-create-table-like.md b/sql-statements/sql-statement-create-table-like.md index dd7aac714c50..515c90893027 100644 --- a/sql-statements/sql-statement-create-table-like.md +++ b/sql-statements/sql-statement-create-table-like.md @@ -10,13 +10,14 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-create-table-like/','/do ## 语法图 -**CreateTableLikeStmt:** +```ebnf+diagram +CreateTableLikeStmt ::= + 'CREATE' OptTemporary 'TABLE' IfNotExists TableName LikeTableWithOrWithoutParen -![CreateTableLikeStmt](/media/sqlgram/CreateTableLikeStmt.png) - -**LikeTableWithOrWithoutParen:** - -![LikeTableWithOrWithoutParen](/media/sqlgram/LikeTableWithOrWithoutParen.png) +LikeTableWithOrWithoutParen ::= + 'LIKE' TableName +| '(' 'LIKE' TableName ')' +``` ## 示例 diff --git a/sql-statements/sql-statement-create-table.md b/sql-statements/sql-statement-create-table.md index 99953d0b7146..15c6c986d2d6 100644 --- a/sql-statements/sql-statement-create-table.md +++ b/sql-statements/sql-statement-create-table.md @@ -10,65 +10,77 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-create-table/','/docs-cn ## 语法图 -**CreateTableStmt:** - -![CreateTableStmt](/media/sqlgram/CreateTableStmt.png) - -**IfNotExists:** - -![IfNotExists](/media/sqlgram/IfNotExists.png) - -**TableName:** - -![TableName](/media/sqlgram/TableName.png) - -**TableElementListOpt:** - -![TableElementListOpt](/media/sqlgram/TableElementListOpt.png) - -**TableElementList:** - -![TableElementList](/media/sqlgram/TableElementList.png) - -**TableElement:** - -![TableElement](/media/sqlgram/TableElement.png) - -**ColumnDef:** - -![ColumnDef](/media/sqlgram/ColumnDef.png) - -**ColumnOptionListOpt:** - -![ColumnOptionListOpt](/media/sqlgram/ColumnOptionListOpt.png) - -**ColumnOptionList:** - -![ColumnOptionList](/media/sqlgram/ColumnOptionList.png) - -**ColumnOption:** - -![ColumnOption](/media/sqlgram/ColumnOption.png) - -**CreateTableOptionListOpt:** - -![CreateTableOptionListOpt](/media/sqlgram/CreateTableOptionListOpt.png) - -**PartitionOpt:** - -![PartitionOpt](/media/sqlgram/PartitionOpt.png) - -**DuplicateOpt:** - -![DuplicateOpt](/media/sqlgram/DuplicateOpt.png) - -**TableOptionList:** - -![TableOptionList](/media/sqlgram/TableOptionList.png) - -**TableOption:** - -![TableOption](/media/sqlgram/TableOption.png) +```ebnf+diagram +CreateTableStmt ::= + 'CREATE' OptTemporary 'TABLE' IfNotExists TableName ( TableElementListOpt CreateTableOptionListOpt PartitionOpt DuplicateOpt AsOpt CreateTableSelectOpt | LikeTableWithOrWithoutParen ) + +IfNotExists ::= + ('IF' 'NOT' 'EXISTS')? + +TableName ::= + Identifier ('.' Identifier)? + +TableElementListOpt ::= + ( '(' TableElementList ')' )? + +TableElementList ::= + TableElement ( ',' TableElement )* + +TableElement ::= + ColumnDef +| Constraint + +ColumnDef ::= + ColumnName ( Type | 'SERIAL' ) ColumnOptionListOpt + +ColumnOptionListOpt ::= + ColumnOption* + +ColumnOptionList ::= + ColumnOption* + +ColumnOption ::= + 'NOT'? 'NULL' +| 'AUTO_INCREMENT' +| PrimaryOpt 'KEY' +| 'UNIQUE' 'KEY'? +| 'DEFAULT' DefaultValueExpr +| 'SERIAL' 'DEFAULT' 'VALUE' +| 'ON' 'UPDATE' NowSymOptionFraction +| 'COMMENT' stringLit +| ConstraintKeywordOpt 'CHECK' '(' Expression ')' EnforcedOrNotOrNotNullOpt +| GeneratedAlways 'AS' '(' Expression ')' VirtualOrStored +| ReferDef +| 'COLLATE' CollationName +| 'COLUMN_FORMAT' ColumnFormat +| 'STORAGE' StorageMedia +| 'AUTO_RANDOM' OptFieldLen + +CreateTableOptionListOpt ::= + TableOptionList? + +PartitionOpt ::= + ( 'PARTITION' 'BY' PartitionMethod PartitionNumOpt SubPartitionOpt PartitionDefinitionListOpt )? + +DuplicateOpt ::= + ( 'IGNORE' | 'REPLACE' )? + +TableOptionList ::= + TableOption ( ','? TableOption )* + +TableOption ::= + PartDefOption +| DefaultKwdOpt ( CharsetKw EqOpt CharsetName | 'COLLATE' EqOpt CollationName ) +| ( 'AUTO_INCREMENT' | 'AUTO_ID_CACHE' | 'AUTO_RANDOM_BASE' | 'AVG_ROW_LENGTH' | 'CHECKSUM' | 'TABLE_CHECKSUM' | 'KEY_BLOCK_SIZE' | 'DELAY_KEY_WRITE' | 'SHARD_ROW_ID_BITS' | 'PRE_SPLIT_REGIONS' ) EqOpt LengthNum +| ( 'CONNECTION' | 'PASSWORD' | 'COMPRESSION' ) EqOpt stringLit +| RowFormat +| ( 'STATS_PERSISTENT' | 'PACK_KEYS' ) EqOpt StatsPersistentVal +| ( 'STATS_AUTO_RECALC' | 'STATS_SAMPLE_PAGES' ) EqOpt ( LengthNum | 'DEFAULT' ) +| 'STORAGE' ( 'MEMORY' | 'DISK' ) +| 'SECONDARY_ENGINE' EqOpt ( 'NULL' | StringName ) +| 'UNION' EqOpt '(' TableNameListOpt ')' +| 'ENCRYPTION' EqOpt EncryptionOpt +``` TiDB 支持以下 `table_option`。TiDB 会解析并忽略其他 `table_option` 参数,例如 `AVG_ROW_LENGTH`、`CHECKSUM`、`COMPRESSION`、`CONNECTION`、`DELAY_KEY_WRITE`、`ENGINE`、`KEY_BLOCK_SIZE`、`MAX_ROWS`、`MIN_ROWS`、`ROW_FORMAT` 和 `STATS_PERSISTENT`。 diff --git a/sql-statements/sql-statement-create-user.md b/sql-statements/sql-statement-create-user.md index 3f1d3ee94fbd..d5f1dfe2d5e7 100644 --- a/sql-statements/sql-statement-create-user.md +++ b/sql-statements/sql-statement-create-user.md @@ -10,29 +10,26 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-create-user/','/docs-cn/ ## 语法图 -**CreateUserStmt:** +```ebnf+diagram +CreateUserStmt ::= + 'CREATE' 'USER' IfNotExists UserSpecList RequireClauseOpt ConnectionOptions PasswordOrLockOptions -![CreateUserStmt](/media/sqlgram/CreateUserStmt.png) +IfNotExists ::= + ('IF' 'NOT' 'EXISTS')? -**IfNotExists:** +UserSpecList ::= + UserSpec ( ',' UserSpec )* -![IfNotExists](/media/sqlgram/IfNotExists.png) +UserSpec ::= + Username AuthOption -**UserSpecList:** +AuthOption ::= + ( 'IDENTIFIED' ( 'BY' ( AuthString | 'PASSWORD' HashString ) | 'WITH' StringName ( 'BY' AuthString | 'AS' HashString )? ) )? -![UserSpecList](/media/sqlgram/UserSpecList.png) - -**UserSpec:** - -![UserSpec](/media/sqlgram/UserSpec.png) - -**AuthOption:** - -![AuthOption](/media/sqlgram/AuthOption.png) - -**StringName:** - -![StringName](/media/sqlgram/StringName.png) +StringName ::= + stringLit +| Identifier +``` ## 示例 diff --git a/sql-statements/sql-statement-create-view.md b/sql-statements/sql-statement-create-view.md index 22e4d36e0563..dd6c9576a0d0 100644 --- a/sql-statements/sql-statement-create-view.md +++ b/sql-statements/sql-statement-create-view.md @@ -10,37 +10,30 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-create-view/','/docs-cn/ ## 语法图 -**CreateViewStmt:** +```ebnf+diagram +CreateViewStmt ::= + 'CREATE' OrReplace ViewAlgorithm ViewDefiner ViewSQLSecurity 'VIEW' ViewName ViewFieldList 'AS' CreateViewSelectOpt ViewCheckOption -![CreateViewStmt](/media/sqlgram/CreateViewStmt.png) +OrReplace ::= + ( 'OR' 'REPLACE' )? -**OrReplace:** +ViewAlgorithm ::= + ( 'ALGORITHM' '=' ( 'UNDEFINED' | 'MERGE' | 'TEMPTABLE' ) )? -![OrReplace](/media/sqlgram/OrReplace.png) +ViewDefiner ::= + ( 'DEFINER' '=' Username )? -**ViewAlgorithm:** +ViewSQLSecurity ::= + ( 'SQL' 'SECURITY' ( 'DEFINER' | 'INVOKER' ) )? -![ViewAlgorithm](/media/sqlgram/ViewAlgorithm.png) +ViewName ::= TableName -**ViewDefiner:** +ViewFieldList ::= + ( '(' Identifier ( ',' Identifier )* ')' )? -![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) +ViewCheckOption ::= + ( 'WITH' ( 'CASCADED' | 'LOCAL' ) 'CHECK' 'OPTION' )? +``` ## 示例 diff --git a/sql-statements/sql-statement-deallocate.md b/sql-statements/sql-statement-deallocate.md index 50932cc629e7..7886b086e375 100644 --- a/sql-statements/sql-statement-deallocate.md +++ b/sql-statements/sql-statement-deallocate.md @@ -10,17 +10,20 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-deallocate/','/docs-cn/v ## 语法图 -**DeallocateStmt:** - -![DeallocateStmt](/media/sqlgram/DeallocateStmt.png) - -**DeallocateSym:** - -![DeallocateSym](/media/sqlgram/DeallocateSym.png) - -**Identifier:** - -![Identifier](/media/sqlgram/Identifier.png) +```ebnf+diagram +DeallocateStmt ::= + DeallocateSym 'PREPARE' Identifier + +DeallocateSym ::= + 'DEALLOCATE' +| 'DROP' + +Identifier ::= + identifier +| UnReservedKeyword +| NotKeywordToken +| TiDBKeyword +``` ## 示例 diff --git a/sql-statements/sql-statement-delete.md b/sql-statements/sql-statement-delete.md index 3e7c99ef33ed..90fde78cc93e 100644 --- a/sql-statements/sql-statement-delete.md +++ b/sql-statements/sql-statement-delete.md @@ -10,9 +10,10 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-delete/','/docs-cn/v4.0/ ## 语法图 -**DeleteFromStmt:** - -![DeleteFromStmt](/media/sqlgram/DeleteFromStmt.png) +```ebnf+diagram +DeleteFromStmt ::= + 'DELETE' TableOptimizerHints PriorityOpt QuickOptional IgnoreOptional ( 'FROM' ( TableName TableAsNameOpt IndexHintListOpt WhereClauseOptional OrderByOptional LimitClause | TableAliasRefList 'USING' TableRefs WhereClauseOptional ) | TableAliasRefList 'FROM' TableRefs WhereClauseOptional ) +``` ## 示例 diff --git a/sql-statements/sql-statement-do.md b/sql-statements/sql-statement-do.md index 9d9605980879..cebdf0dc20c4 100644 --- a/sql-statements/sql-statement-do.md +++ b/sql-statements/sql-statement-do.md @@ -16,17 +16,17 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-do/','/docs-cn/v4.0/sql- ## 语法图 -**DoStmt:** +```ebnf+diagram +DoStmt ::= 'DO' ExpressionList -![DoStmt](/media/sqlgram/DoStmt.png) +ExpressionList ::= + Expression ( ',' Expression )* -**ExpressionList:** - -![ExpressionList](/media/sqlgram/ExpressionList.png) - -**Expression:** - -![Expression](/media/sqlgram/Expression.png) +Expression ::= + ( singleAtIdentifier assignmentEq | 'NOT' | Expression ( logOr | 'XOR' | logAnd ) ) Expression +| 'MATCH' '(' ColumnNameList ')' 'AGAINST' '(' BitExpr FulltextSearchModifierOpt ')' +| PredicateExpr ( IsOrNotOp 'NULL' | CompareOp ( ( singleAtIdentifier assignmentEq )? PredicateExpr | AnyOrAll SubSelect ) )* ( IsOrNotOp ( trueKwd | falseKwd | 'UNKNOWN' ) )? +``` ## 示例 diff --git a/sql-statements/sql-statement-drop-binding.md b/sql-statements/sql-statement-drop-binding.md index 91ee752f240e..cd636d7166a8 100644 --- a/sql-statements/sql-statement-drop-binding.md +++ b/sql-statements/sql-statement-drop-binding.md @@ -12,17 +12,16 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-drop-binding/','/docs-cn ## 语法图 -**DropBindingStmt:** +```ebnf+diagram +DropBindingStmt ::= + 'DROP' GlobalScope 'BINDING' 'FOR' SelectStmt ( 'USING' SelectStmt )? -![DropBindingStmt](/media/sqlgram/DropBindingStmt.png) +GlobalScope ::= + ( 'GLOBAL' | 'SESSION' )? -**GlobalScope:** - -![GlobalScope](/media/sqlgram/GlobalScope.png) - -**SelectStmt** - -![SelectStmt](/media/sqlgram/SelectStmt.png) +SelectStmt ::= + ( SelectStmtBasic | SelectStmtFromDualTable | SelectStmtFromTable ) OrderByOptional SelectStmtLimit SelectLockOpt SelectStmtIntoOption +``` ## 示例 diff --git a/sql-statements/sql-statement-drop-column.md b/sql-statements/sql-statement-drop-column.md index 4f4eacd631ef..1d5b63333c97 100644 --- a/sql-statements/sql-statement-drop-column.md +++ b/sql-statements/sql-statement-drop-column.md @@ -10,17 +10,36 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-drop-column/','/docs-cn/ ## 语法图 -**AlterTableStmt:** - -![AlterTableStmt](/media/sqlgram/AlterTableStmt.png) - -**AlterTableSpec:** - -![AlterTableSpec](/media/sqlgram/AlterTableSpec.png) - -**ColumnName:** - -![ColumnName](/media/sqlgram/ColumnName.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' + +ColumnName ::= + Identifier ( '.' Identifier ( '.' Identifier )? )? +``` ## 示例 diff --git a/sql-statements/sql-statement-drop-database.md b/sql-statements/sql-statement-drop-database.md index 82aab63efcda..80c323bb0fd5 100644 --- a/sql-statements/sql-statement-drop-database.md +++ b/sql-statements/sql-statement-drop-database.md @@ -10,13 +10,12 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-drop-database/','/docs-c ## 语法图 -**DropDatabaseStmt:** +```ebnf+diagram +DropDatabaseStmt ::= + 'DROP' 'DATABASE' IfExists DBName -![DropDatabaseStmt](/media/sqlgram/DropDatabaseStmt.png) - -**IfExists:** - -![IfExists](/media/sqlgram/IfExists.png) +IfExists ::= ( 'IF' 'EXISTS' )? +``` ## 示例 diff --git a/sql-statements/sql-statement-drop-index.md b/sql-statements/sql-statement-drop-index.md index 4f2b7291df34..c53d5320d317 100644 --- a/sql-statements/sql-statement-drop-index.md +++ b/sql-statements/sql-statement-drop-index.md @@ -10,29 +10,25 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-drop-index/','/docs-cn/v ## 语法图 -**AlterTableDropIndexStmt:** +```ebnf+diagram +AlterTableDropIndexStmt ::= + 'ALTER' IgnoreOptional 'TABLE' AlterTableDropIndexSpec -![AlterTableDropIndexStmt](/media/sqlgram/AlterTableDropIndexStmt.png) +IgnoreOptional ::= + 'IGNORE'? -**IgnoreOptional:** +TableName ::= + Identifier ('.' Identifier)? -![IgnoreOptional](/media/sqlgram/IgnoreOptional.png) +AlterTableDropIndexSpec ::= + 'DROP' ( KeyOrIndex | 'FOREIGN' 'KEY' ) IfExists Identifier -**TableName:** +KeyOrIndex ::= + 'KEY' +| 'INDEX' -![TableName](/media/sqlgram/TableName.png) - -**AlterTableDropIndexSpec:** - -![AlterTableDropIndexSpec](/media/sqlgram/AlterTableDropIndexSpec.png) - -**KeyOrIndex:** - -![KeyOrIndex](/media/sqlgram/KeyOrIndex.png) - -**IfExists:** - -![IfExists](/media/sqlgram/IfExists.png) +IfExists ::= ( 'IF' 'EXISTS' )? +``` ## 示例 diff --git a/sql-statements/sql-statement-drop-role.md b/sql-statements/sql-statement-drop-role.md index 5e5b06e1b6b0..5d01f2458afc 100644 --- a/sql-statements/sql-statement-drop-role.md +++ b/sql-statements/sql-statement-drop-role.md @@ -9,13 +9,13 @@ summary: TiDB 数据库中 DROP ROLE 的使用概况。 ## 语法图 -**DropRoleStmt:** +```ebnf+diagram +DropRoleStmt ::= + 'DROP' 'ROLE' ( 'IF' 'EXISTS' )? RolenameList -![DropRoleStmt](/media/sqlgram/DropRoleStmt.png) - -**RolenameList:** - -![RolenameList](/media/sqlgram/RolenameList.png) +RolenameList ::= + Rolename ( ',' Rolename )* +``` ## 示例 diff --git a/sql-statements/sql-statement-drop-sequence.md b/sql-statements/sql-statement-drop-sequence.md index 89793f6339c3..53c5c4ee773b 100644 --- a/sql-statements/sql-statement-drop-sequence.md +++ b/sql-statements/sql-statement-drop-sequence.md @@ -10,21 +10,18 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-drop-sequence/','/docs-c ## 语法图 -**DropSequenceStmt:** +```ebnf+diagram +DropSequenceStmt ::= + 'DROP' 'SEQUENCE' IfExists TableNameList -![DropSequenceStmt](/media/sqlgram/DropSequenceStmt.png) +IfExists ::= ( 'IF' 'EXISTS' )? -**IfExists:** +TableNameList ::= + TableName ( ',' TableName )* -![IfExists](/media/sqlgram/IfExists.png) - -**TableNameList:** - -![TableNameList](/media/sqlgram/TableNameList.png) - -**TableName:** - -![TableName](/media/sqlgram/TableName.png) +TableName ::= + Identifier ('.' Identifier)? +``` ## 示例 diff --git a/sql-statements/sql-statement-drop-stats.md b/sql-statements/sql-statement-drop-stats.md index 0931d6b68862..fbb72ea0ab0d 100644 --- a/sql-statements/sql-statement-drop-stats.md +++ b/sql-statements/sql-statement-drop-stats.md @@ -10,13 +10,13 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-drop-stats/','/docs-cn/v ## 语法图 -**DropStatsStmt:** +```ebnf+diagram +DropStatsStmt ::= + 'DROP' 'STATS' TableName -![DropTableStmt](/media/sqlgram/DropStatsStmt.png) - -**TableName:** - -![TableName](/media/sqlgram/TableName.png) +TableName ::= + Identifier ('.' Identifier)? +``` ## 示例 diff --git a/sql-statements/sql-statement-drop-table.md b/sql-statements/sql-statement-drop-table.md index d86da32c0210..103f6e4a0196 100644 --- a/sql-statements/sql-statement-drop-table.md +++ b/sql-statements/sql-statement-drop-table.md @@ -10,17 +10,17 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-drop-table/','/docs-cn/v ## 语法图 -**DropTableStmt:** +```ebnf+diagram +DropTableStmt ::= + 'DROP' OptTemporary TableOrTables IfExists TableNameList RestrictOrCascadeOpt -![DropTableStmt](/media/sqlgram/DropTableStmt.png) +TableOrTables ::= + 'TABLE' +| 'TABLES' -**TableOrTables:** - -![TableOrTables](/media/sqlgram/TableOrTables.png) - -**TableNameList:** - -![TableNameList](/media/sqlgram/TableNameList.png) +TableNameList ::= + TableName ( ',' TableName )* +``` ## 示例 diff --git a/sql-statements/sql-statement-drop-user.md b/sql-statements/sql-statement-drop-user.md index 9bc728a08553..50fa04ebb207 100644 --- a/sql-statements/sql-statement-drop-user.md +++ b/sql-statements/sql-statement-drop-user.md @@ -11,13 +11,13 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-drop-user/','/docs-cn/v4 ## 语法图 -**DropUserStmt:** +```ebnf+diagram +DropUserStmt ::= + 'DROP' 'USER' ( 'IF' 'EXISTS' )? UsernameList -![DropUserStmt](/media/sqlgram/DropUserStmt.png) - -**Username:** - -![Username](/media/sqlgram/Username.png) +Username ::= + StringName ('@' StringName | singleAtIdentifier)? | 'CURRENT_USER' OptionalBraces +``` ## 示例 diff --git a/sql-statements/sql-statement-drop-view.md b/sql-statements/sql-statement-drop-view.md index 5053346841cd..fd40035a46c3 100644 --- a/sql-statements/sql-statement-drop-view.md +++ b/sql-statements/sql-statement-drop-view.md @@ -10,17 +10,16 @@ aliases: ['/docs-cn/stable/sql-statements/sql-statement-drop-view/','/docs-cn/v4 ## 语法图 -**DropViewStmt:** +```ebnf+diagram +DropViewStmt ::= + 'DROP' 'VIEW' ( 'IF' 'EXISTS' )? TableNameList RestrictOrCascadeOpt -![DropViewStmt](/media/sqlgram/DropViewStmt.png) +TableNameList ::= + TableName ( ',' TableName )* -**TableNameList:** - -![TableNameList](/media/sqlgram/TableNameList.png) - -**TableName:** - -![TableName](/media/sqlgram/TableName.png) +TableName ::= + Identifier ('.' Identifier)? +``` ## 示例