テーブルの作成

このステートメントは、現在選択されているデータベースに新しいテーブルを作成します。これは、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
Constraint
IndexDefForeignKeyDef
IndexDef
INDEXKEYIndexName(KeyPartList)IndexOption
KeyPartList
KeyPart,
KeyPart
ColumnName(Length)ASCDESC(Expression)ASCDESC
IndexOption
COMMENTStringVISIBLEINVISIBLE
ForeignKeyDef
CONSTRAINTIdentifierFOREIGNKEYIdentifier(ColumnName,)REFERENCESTableName(ColumnName,)ONDELETEReferenceOptionONUPDATEReferenceOption
ReferenceOption
RESTRICTCASCADESETNULLSETDEFAULTNOACTION
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)ENCRYPTIONEqOptEncryptionOptTTLEqOptTimeColumnName+INTERVALExpressionTimeUnitTTLEnableEqOptONOFFTTLJobIntervalEqOptstringLitPlacementPolicyOption
OnCommitOpt
ONCOMMITDELETEROWS
PlacementPolicyOption
PLACEMENTPOLICYEqOptPolicyNamePLACEMENTPOLICYEqOptSETDEFAULT

次の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。このオプションはTiDB サーバーレスクラスターでは使用できないことに注意してください。
AUTO_RANDOM_BASEauto_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(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の互換性

  • 空間型を除くすべてのデータ型がサポートされています。
  • FULLTEXT HASHおよびSPATIALインデックスはサポートされていません。
  • 互換性を確保するために、 index_col_name属性は、デフォルトで最大長が 3072 バイトに制限された長さオプションをサポートします。長さ制限は、 max-index-length構成オプションを通じて変更できます。詳細はTiDB 設定ファイルを参照してください。
  • index_col_name[ASC | DESC]現在解析されていますが、無視されます (MySQL 5.7 と互換性のある動作)。
  • COMMENT属性はWITH PARSERオプションをサポートしません。
  • TiDB は、単一テーブル内でデフォルトで 1017 列、最大 4096 列をサポートします。 InnoDB の対応する数制限は 1017 列で、MySQL のハード制限は 4096 列です。詳細はTiDB の制限事項を参照してください。
  • パーティション化されたテーブルの場合、範囲、ハッシュ、および範囲列 (単一列) のみがサポートされます。詳細はパーティションテーブルを参照してください。
  • CHECK制約は解析されますが無視されます (MySQL 5.7 と互換性のある動作)。詳細は制約を参照してください。

こちらも参照

このページは役に立ちましたか?