テーブルを作成

このステートメントは、現在選択されているデータベースに新しいテーブルを作成します。 MySQL のCREATE TABLEステートメントと同様に動作します。

あらすじ

CreateTableStmt
CREATEOptTemporaryTABLEIfNotExistsTableNameTableElementListOptCreateTableOptionListOptPartitionOptDuplicateOptAsOptCreateTableSelectOptLikeTableWithOrWithoutParenOnCommitOpt
OptTemporary
TEMPORARYGLOBALTEMPORARY
IfNotExists
IFNOTEXISTS
TableName
Identifier.Identifier
TableElementListOpt
(TableElementList)
TableElementList
TableElement,
TableElement
ColumnDefConstraint
ColumnDef
ColumnNameTypeSERIALColumnOptionListOpt
ColumnOptionListOpt
ColumnOption
ColumnOptionList
ColumnOption
ColumnOption
NOTNULLAUTO_INCREMENTPrimaryOptKEYUNIQUEKEYDEFAULTDefaultValueExprSERIALDEFAULTVALUEONUPDATENowSymOptionFractionCOMMENTstringLitConstraintKeywordOptCHECK(Expression)EnforcedOrNotOrNotNullOptGeneratedAlwaysAS(Expression)VirtualOrStoredReferDefCOLLATECollationNameCOLUMN_FORMATColumnFormatSTORAGEStorageMediaAUTO_RANDOMOptFieldLen
CreateTableOptionListOpt
TableOptionList
PartitionOpt
PARTITIONBYPartitionMethodPartitionNumOptSubPartitionOptPartitionDefinitionListOpt
DuplicateOpt
IGNOREREPLACE
TableOptionList
TableOption,
TableOption
PartDefOptionDefaultKwdOptCharsetKwEqOptCharsetNameCOLLATEEqOptCollationNameAUTO_INCREMENTAUTO_ID_CACHEAUTO_RANDOM_BASEAVG_ROW_LENGTHCHECKSUMTABLE_CHECKSUMKEY_BLOCK_SIZEDELAY_KEY_WRITESHARD_ROW_ID_BITSPRE_SPLIT_REGIONSEqOptLengthNumCONNECTIONPASSWORDCOMPRESSIONEqOptstringLitRowFormatSTATS_PERSISTENTPACK_KEYSEqOptStatsPersistentValSTATS_AUTO_RECALCSTATS_SAMPLE_PAGESEqOptLengthNumDEFAULTSTORAGEMEMORYDISKSECONDARY_ENGINEEqOptNULLStringNameUNIONEqOpt(TableNameListOpt)ENCRYPTIONEqOptEncryptionOpt
OnCommitOpt
ONCOMMITDELETEROWS

次のtable_optionsがサポートされています。 AVG_ROW_LENGTHCHECKSUMCOMPRESSIONCONNECTIONDELAY_KEY_WRITEENGINEKEY_BLOCK_SIZEMAX_ROWSMIN_ROWSROW_FORMATSTATS_PERSISTENTなどのその他のオプションは解析されますが、無視されます。

オプション説明
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_CACHETiDB インスタンスで自動 ID キャッシュ サイズを設定するには。デフォルトでは、TiDB は自動 ID の割り当て速度に応じてこのサイズを自動的に変更します。AUTO_ID_CACHE = 200
AUTO_RANDOM_BASEauto_random の増分部分の初期値を設定します。このオプションは、内部インターフェースの一部と見なすことができます。ユーザーはこのパラメータを無視できますAUTO_RANDOM_BASE = 0
CHARACTER SETテーブルにキャラクターセットを指定するにはCHARACTER SET = 'utf8mb4'
COMMENTコメント情報COMMENT = 'コメント情報'

ノート:

split-table構成オプションはデフォルトで有効になっています。有効にすると、新しく作成されたテーブルごとに個別のリージョンが作成されます。詳細については、 TiDB 構成ファイルを参照してください。

ノート:

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(11) | 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(11) 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(20)   | NO   | PRI  | NULL    | auto_increment |
| b     | varchar(200) | NO   |      | NULL    |                |
+-------+--------------+------+------+---------+----------------+
2 rows in set (0.00 sec)

MySQL の互換性

  • 空間型を除くすべてのデータ型がサポートされています。
  • FULLTEXTHASHおよびSPATIALのインデックスはサポートされていません。
  • 互換性のために、 index_col_name属性は、デフォルトで最大長が 3072 バイトに制限された長さオプションをサポートします。長さ制限は、 max-index-length構成オプションで変更できます。詳細については、 TiDB 構成ファイルを参照してください。
  • 互換性のために、 index_col_name属性は、最大長が 3072 バイトに制限された長さオプションをサポートします。
  • index_col_name[ASC | DESC]は現在解析されていますが、無視されます (MySQL 5.7互換の動作)。
  • COMMENT属性はWITH PARSERオプションをサポートしません。
  • TiDB は、1 つのテーブルで最大 512 列をサポートします。 InnoDB での対応する数の制限は 1017 で、MySQL でのハード リミットは 4096 です。詳細については、 TiDB の制限事項を参照してください。
  • 分割されたテーブルでは、範囲、ハッシュ、および範囲列 (単一列) のみがサポートされます。詳細については、 分割されたテーブルを参照してください。
  • CHECK制約は解析されますが無視されます (MySQL 5.7互換の動作)。詳細については、 制約を参照してください。
  • FOREIGN KEY制約は解析および保存されますが、DML ステートメントによって適用されません。詳細については、 制約を参照してください。

こちらもご覧ください

エコシステム
TiDB
TiKV
TiFlash
TiSpark
Chaos Mesh
© 2023 PingCAP. All Rights Reserved.