Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions sql-statements/sql-statement-begin.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ In the absence of a `BEGIN` statement, every statement will by default autocommi

## Synopsis

**BeginTransactionStmt:**

![BeginTransactionStmt](/media/sqlgram/BeginTransactionStmt.png)
```ebnf+diagram
BeginTransactionStmt ::=
'BEGIN' ( 'PESSIMISTIC' | 'OPTIMISTIC' )?
| 'START' 'TRANSACTION' ( 'READ' ( 'WRITE' | 'ONLY' ( 'WITH' 'TIMESTAMP' 'BOUND' TimestampBound )? ) | 'WITH' 'CONSISTENT' 'SNAPSHOT' )?
```

## Examples

Expand Down
55 changes: 36 additions & 19 deletions sql-statements/sql-statement-change-column.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,42 @@ The `ALTER TABLE.. CHANGE COLUMN` statement changes a column on an existing tabl

## Synopsis

**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 )?
```

## Examples

Expand Down
13 changes: 7 additions & 6 deletions sql-statements/sql-statement-commit.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@ In the absence of a `BEGIN` or `START TRANSACTION` statement, the default behavi

## Synopsis

**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'
```

## Examples

Expand Down
19 changes: 9 additions & 10 deletions sql-statements/sql-statement-create-binding.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,16 @@ The bound SQL statement is parameterized and stored in the system table. When a

## Synopsis

**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
```

****

Expand Down Expand Up @@ -141,4 +140,4 @@ This statement is a TiDB extension to MySQL syntax.
* [SHOW [GLOBAL|SESSION] BINDINGS](/sql-statements/sql-statement-show-bindings.md)
* [ANALYZE TABLE](/sql-statements/sql-statement-analyze-table.md)
* [Optimizer Hints](/optimizer-hints.md)
* [SQL Plan Management](/sql-plan-management.md)
* [SQL Plan Management](/sql-plan-management.md)
22 changes: 10 additions & 12 deletions sql-statements/sql-statement-create-database.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,19 @@ This statement creates a new database in TiDB. The MySQL terminology for 'databa

## Synopsis

**CreateDatabaseStmt:**
```ebnf+diagram
CreateDatabaseStmt ::=
'CREATE' 'DATABASE' IfNotExists DBName DatabaseOptionListOpt

![CreateDatabaseStmt](/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?
```

## Syntax

Expand Down
83 changes: 38 additions & 45 deletions sql-statements/sql-statement-create-index.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,65 +9,58 @@ This statement adds a new index to an existing table. It is an alternative synta

## Synopsis

**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'
```

## Examples

Expand Down
17 changes: 8 additions & 9 deletions sql-statements/sql-statement-create-role.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,16 @@ This statement creates a new role, which can be assigned to users as part of rol

## Synopsis

**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
```

## Examples

Expand Down
48 changes: 25 additions & 23 deletions sql-statements/sql-statement-create-sequence.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,31 @@ The `CREATE SEQUENCE` statement creates sequence objects in TiDB. The sequence i

## Synopsis

**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'
```

## Syntax

Expand Down
13 changes: 7 additions & 6 deletions sql-statements/sql-statement-create-table-like.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ This statement copies the definition of an existing table, without copying any d

## Synopsis

**CreateTableStmt:**
```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 ')'
```

## Examples

Expand Down
Loading