テーブルの作成
この文は、現在選択されているデータベースに新しいテーブルを作成します。MySQLのCREATE TABLE文と同様の動作をします。
概要
- CreateTableStmt
 - OptTemporary
 - IfNotExists
 - TableName
 - TableElementListOpt
 - TableElementList
 - TableElement
 - ColumnDef
 - ColumnOptionListOpt
 - ColumnOptionList
 - ColumnOption
 - Constraint
 - IndexDef
 - KeyPartList
 - KeyPart
 - IndexOption
 - ForeignKeyDef
 - ReferenceOption
 - CreateTableOptionListOpt
 - PartitionOpt
 - DuplicateOpt
 - TableOptionList
 - TableOption
 - OnCommitOpt
 - PlacementPolicyOption
 - DefaultValueExpr
 - BuiltinFunction
 - NowSymOptionFractionParentheses
 - NowSymOptionFraction
 - NextValueForSequenceParentheses
 - NextValueForSequence
 
CreateTableStmt ::=
    'CREATE' OptTemporary 'TABLE' IfNotExists TableName ( TableElementListOpt CreateTableOptionListOpt PartitionOpt DuplicateOpt AsOpt CreateTableSelectOpt | LikeTableWithOrWithoutParen ) OnCommitOpt
OptTemporary ::=
    ( 'TEMPORARY' | ('GLOBAL' 'TEMPORARY') )?
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' ( 'GLOBAL' | 'LOCAL' )?
|   'UNIQUE' 'KEY'? ( 'GLOBAL' | 'LOCAL' )?
|   '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
Constraint ::=
    IndexDef
|   ForeignKeyDef
IndexDef ::=
    ( 'INDEX' | 'KEY' ) IndexName? '(' KeyPartList ')' IndexOption?
KeyPartList ::=
    KeyPart ( ',' KeyPart )*
KeyPart ::=
    ColumnName ( '(' Length ')')? ( 'ASC' | 'DESC' )?
|   '(' Expression ')' ( 'ASC' | 'DESC' )?
IndexOption ::=
    'COMMENT' String
|   ( 'VISIBLE' | 'INVISIBLE' )
|   ('USING' | 'TYPE') ('BTREE' | 'RTREE' | 'HASH')
|   ( 'GLOBAL' | 'LOCAL' )
ForeignKeyDef
         ::= ( 'CONSTRAINT' Identifier )? 'FOREIGN' 'KEY'
             Identifier? '(' ColumnName ( ',' ColumnName )* ')'
             'REFERENCES' TableName '(' ColumnName ( ',' ColumnName )* ')'
             ( 'ON' 'DELETE' ReferenceOption )?
             ( 'ON' 'UPDATE' ReferenceOption )?
ReferenceOption
         ::= 'RESTRICT'
           | 'CASCADE'
           | 'SET' 'NULL'
           | 'SET' 'DEFAULT'
           | 'NO' 'ACTION'
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
|    'TTL' EqOpt TimeColumnName '+' 'INTERVAL' Expression TimeUnit (TTLEnable EqOpt ( 'ON' | 'OFF' ))? (TTLJobInterval EqOpt stringLit)?
|   PlacementPolicyOption
OnCommitOpt ::=
    ('ON' 'COMMIT' 'DELETE' 'ROWS')?
PlacementPolicyOption ::=
    "PLACEMENT" "POLICY" EqOpt PolicyName
|   "PLACEMENT" "POLICY" (EqOpt | "SET") "DEFAULT"
DefaultValueExpr ::=
    NowSymOptionFractionParentheses
|   SignedLiteral
|   NextValueForSequenceParentheses
|   BuiltinFunction
BuiltinFunction ::=
    '(' BuiltinFunction ')'
|   identifier '(' ')'
|   identifier '(' ExpressionList ')'
|   "REPLACE" '(' ExpressionList ')'
NowSymOptionFractionParentheses ::=
    '(' NowSymOptionFractionParentheses ')'
|   NowSymOptionFraction
NowSymOptionFraction ::=
    NowSym
|   NowSymFunc '(' ')'
|   NowSymFunc '(' NUM ')'
|   CurdateSym '(' ')'
|   "CURRENT_DATE"
NextValueForSequenceParentheses ::=
    '(' NextValueForSequenceParentheses ')'
|   NextValueForSequence
NextValueForSequence ::=
    "NEXT" "VALUE" forKwd TableName
|   "NEXTVAL" '(' TableName ')'
以下CHECKSUM table_optionsがサポートされDELAY_KEY_WRITEいMAX_ROWS 。その他KEY_BLOCK_SIZEオプション( AVG_ROW_LENGTHなどCOMPRESSION ROW_FORMAT解析STATS_PERSISTENTれますがMIN_ROWSさCONNECTION ENGINE 。
| オプション | 説明 | 例 | 
|---|---|---|
AUTO_INCREMENT | 増分フィールドの初期値 | AUTO_INCREMENT = 5 | 
SHARD_ROW_ID_BITS | 暗黙の_tidb_rowidシャードのビット数を設定するには | SHARD_ROW_ID_BITS = 4 | 
PRE_SPLIT_REGIONS | テーブルを作成するときに2^(PRE_SPLIT_REGIONS)リージョンを事前に分割するには | PRE_SPLIT_REGIONS = 4 | 
AUTO_ID_CACHE | TiDBインスタンスの自動IDキャッシュサイズを設定します。デフォルトでは、TiDBは自動IDの割り当て速度に応じてこのサイズを自動的に変更します。 | AUTO_ID_CACHE = 200 | 
AUTO_RANDOM_BASE | auto_randomの初期増分値を設定します。このオプションは内部インターフェースの一部とみなすことができます。ユーザーはこのパラメータを無視できます。 | AUTO_RANDOM_BASE = 0 | 
CHARACTER SET | テーブルの文字セット指定するには | CHARACTER SET = 'utf8mb4' | 
COMMENT | コメント情報 | COMMENT = 'コメント情報' | 
注記:
split-table設定オプションはデフォルトで有効になっています。有効にすると、新しく作成されたテーブルごとに個別のリージョンが作成されます。詳細については、 TiDB構成ファイル参照してください。
例
簡単なテーブルを作成し、 1 行を挿入します。
CREATE TABLE t1 (a int);
DESC t1;
SHOW CREATE TABLE t1\G
INSERT INTO t1 (a) VALUES (1);
SELECT * FROM t1;
mysql> drop table if exists t1;
Query OK, 0 rows affected (0.23 sec)
mysql> CREATE TABLE t1 (a int);
Query OK, 0 rows affected (0.09 sec)
mysql> DESC t1;
+-------+------+------+------+---------+-------+
| Field | Type | Null | Key  | Default | Extra |
+-------+------+------+------+---------+-------+
| a     | int  | YES  |      | NULL    |       |
+-------+------+------+------+---------+-------+
1 row in set (0.00 sec)
mysql> SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `a` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
1 row in set (0.00 sec)
mysql> INSERT INTO t1 (a) VALUES (1);
Query OK, 1 row affected (0.03 sec)
mysql> SELECT * FROM t1;
+------+
| a    |
+------+
|    1 |
+------+
1 row in set (0.00 sec)
テーブルが存在する場合はそれを削除し、存在しない場合は条件付きでテーブルを作成します。
DROP TABLE IF EXISTS t1;
CREATE TABLE IF NOT EXISTS t1 (
 id BIGINT NOT NULL PRIMARY KEY auto_increment,
 b VARCHAR(200) NOT NULL
);
DESC t1;
mysql> DROP TABLE IF EXISTS t1;
Query OK, 0 rows affected (0.22 sec)
mysql> CREATE TABLE IF NOT EXISTS t1 (
         id BIGINT NOT NULL PRIMARY KEY auto_increment,
         b VARCHAR(200) NOT NULL
        );
Query OK, 0 rows affected (0.08 sec)
mysql> DESC t1;
+-------+--------------+------+------+---------+----------------+
| Field | Type         | Null | Key  | Default | Extra          |
+-------+--------------+------+------+---------+----------------+
| id    | bigint       | NO   | PRI  | NULL    | auto_increment |
| b     | varchar(200) | NO   |      | NULL    |                |
+-------+--------------+------+------+---------+----------------+
2 rows in set (0.00 sec)
MySQLの互換性
空間タイプを除くすべてのデータ型がサポートされています。
TiDB
RTREEBTREEHASHインデックス タイプを受け入れますが、それらを無視します。TiDB Self-Managed およびTiDB Cloud Dedicated は、
FULLTEXT構文の解析をサポートしますが、FULLTEXTインデックスの使用はサポートしません。注記:
現在、特定の AWS リージョンの {{{ .starter }} および {{{ .essential }}} クラスターのみが
FULLTEXT構文とインデックスサポートしています。GLOBALインデックス オプションを使用してPRIMARY KEYまたはUNIQUE INDEXグローバルインデックスとして設定することは、 パーティションテーブルの TiDB 拡張であり、MySQL とは互換性がありません。
- 互換性のため、 
index_col_name属性はデフォルトで最大3072バイトの長さ制限を持つ長さオプションをサポートしています。長さ制限はmax-index-length設定オプションで変更できます。詳細についてはTiDB構成ファイル参照してください。 
index_col_nameのうち[ASC | DESC]現在解析されていますが無視されます (MySQL 5.7互換の動作)。COMMENT属性はWITH PARSERオプションをサポートしていません。- TiDBは、デフォルトで1つのテーブルあたり1017列、最大4096列をサポートします。InnoDBにおける対応する列数制限は1017列、MySQLにおけるハードリミットは4096列です。詳細については、 TiDB の制限参照してください。
 - TiDBは
HASH、RANGE、LIST、およびKEYパーティションタイプをサポートします。サポートされていないパーティションタイプの場合、TiDBはWarning: Unsupported partition type %s, treat as normal table返します。ここで、%sサポートされていない特定のパーティションタイプです。