功能描述
创建表。
语法
CREATE TABLE [IF NOT EXISTS] table_name(table_definition_list) [table_option_list] [partition_clause] [opt_using_policy] ;table_definition_list:table_definition [, table_definition ...]table_definition:column_definition_list| [CONSTRAINT [constraint_name]] PRIMARY KEY index_desc| [CONSTRAINT [constraint_name]] UNIQUE {INDEX | KEY}[index_name] index_desc| [CONSTRAINT [constraint_name]] CHECK(expression) constranit_statecolumn_definition_list:column_definition [, column_definition ...]column_definition:column_name data_type[DEFAULT const_value] [AUTO_INCREMENT][NULL | NOT NULL] [[PRIMARY] KEY] [UNIQUE [KEY]] [COMMENT string_value]index_desc:(column_desc_list) [index_option_list]index_option_list:index_option [ index_option ...]index_option:KEY_BLOCK_SIZE [=] INT_VALUE| COMMENT string_valuetable_option_list:table_option [ table_option ...]table_option:[DEFAULT] {CHARSET | CHARACTER SET} [=] charset_name| [DEFAULT] COLLATE [=] collation_name| COMMENT string_value| ROW_FORMAT [=] REDUNDANT|COMPACT|DYNAMIC|COMPRESSED|DEFAULTpartition_option:PARTITION BY HASH(expression)[subpartition_option] PARTITIONS partition_count| PARTITION BY KEY([column_name_list])[subpartition_option] PARTITIONS partition_count| PARTITION BY RANGE {(expression) | COLUMNS (column_name_list)}[subpartition_option] (range_partition_list)| PARTITION BY LIST {(expression) | COLUMNS (column_name_list)}[subpartition_option] PARTITIONS partition_count| PARTITION BY RANGE [COLUMNS]([column_name_list]) (range_partition_list)subpartition_option:SUBPARTITION BY HASH(expression)SUBPARTITIONS subpartition_count| SUBPARTITION BY KEY(column_name_list)SUBPARTITIONS subpartition_count| SUBPARTITION BY RANGE {(expression) | COLUMNS (column_name_list)}(range_subpartition_list)| SUBPARTITION BY LIST(expression)range_partition_list:range_partition [, range_partition ...]range_partition:PARTITION partition_nameVALUES LESS THAN {(expression_list) | MAXVALUE}range_subpartition_list:range_subpartition [, range_subpartition ...]range_subpartition:SUBPARTITION subpartition_nameVALUES LESS THAN {(expression_list) | MAXVALUE}expression_list:expression [, expression ...]column_name_list:column_name [, column_name ...]partition_name_list:partition_name [, partition_name ...]partition_count | subpartition_count:INT_VALUEopt_using_policy:USING DISTRIBUTION POLICY distribution_policy_name| USING PARTITION POLICY partition_policy_name
参数说明
参数 | 是否可选 | 描述 |
IF NOT EXISTS | 可选 | 如果指定 IF NOT EXISTS ,即使待创建的表已存在,也不会报错;如果不指定且待创建的表已存在,则系统会报错。 |
PRIMARY KEY | 可选 | 为创建的表指定主键。如果不指定,则使用隐藏主键。 |
KEY | INDEX | 可选 | 为创建的表指定键或索引。如果不指定索引名,则会使用索引引用的第一列作为索引名,如果命名存在重复,则会使用下划线(_)+ 序号的方式命名。(例如,使用 c1 列创建的索引如果命名重复,则会将索引命名为 c1_2 。) 您可以通过 SHOW INDEX 语句查看表上的索引。 |
ROW_FORMAT | 可选 | 指定表是否开启 Encoding 存储格式。 redundant:不开启 Encoding 存储格式。 compact:不开启 Encoding 存储格式。 dynamic:Encoding 存储格式。 compressed:Encoding 存储格式。 default:等价 dynamic 模式。 |
KEY_BLOCK_SIZE | 可选 | 指定索引块的大小(以字节为单位)。 |
CHARSET | CHARACTER SET | 可选 | 指定表中列的默认字符集。 |
COLLATE | 可选 | 指定表中列的默认字符序。 |
COMMENT | 可选 | 注释。不区分大小写。 |
CHECK | 可选 | 限制列中的值的范围。 如果对单个列定义 CHECK 约束,那么该列级约束可以写到列定义中,并且可以指定名称。如果对一个表定义 CHECK 约束,那么此约束会应用于表中多个列,且允许出现在列的定义前。在删除表时,表中创建的 CHECK 约束也会一起被删除。可以通过如下方式查看约束信息: 使用 SHOW CREATE TABLE 命令 查看 information_schema.TABLE_CONSTRAINTS 视图查看 information_schema.CHECK_CONSTRAINTS 视图 |
constraint_name | 可选 | 约束名称,最多包含 64 个字符。 约束名称的开头结尾中间都允许有空格,但需要用"`"标识名称的开头和结尾。 约束名称可以包含特殊字符"$"。 如果约束名称为保留字,需要用"`"标识,否则会报错。 在同一 Database 下不允许 CHECK 约束的名称重复。 |
expression | 可选 | 约束表达式。 expression 不允许为空。expression 结果不能为非布尔类型。expression 不能包含不存在的列。 |
distribution_policy_name | 可选 | 指定需绑定的数据分布策略。请提前创建数据分布策略,详细请咨询技术支持工程师。 预置分布策略: inner_affinity :二级分区表的内部亲和性策略,绑定策略后不同一级分区下的对应二级分区会绑定在同一个 raft group 中,如 p0.sp0 与 p1.sp0 会放置在同一个 raft group 中。 |
partition_policy_name | 可选 |
示例
创建数据库表。
tdsql [test]> CREATE TABLE tbl1 (c1 INT PRIMARY KEY, c2 VARCHAR(50));Query OK, 0 rows affected
创建带索引的表。
tdsql [test]> CREATE TABLE tbl2 (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX i1 (c2));Query OK, 0 rows affected
创建 Hash 分区,分区数为
8
的表。tdsql [test]> CREATE TABLE tbl3 (c1 INT PRIMARY KEY, c2 INT) PARTITION BY HASH(c1) PARTITIONS 8;Query OK, 0 rows affected
创建一级分区为 Range 分区,二级分区为 Key 分区的表。
tdsql [test]> CREATE TABLE tbl4 (c1 INT, c2 INT, c3 INT) PARTITION BY RANGE(c1)SUBPARTITION BY KEY(c2, c3) SUBPARTITIONS 5(PARTITION p0 VALUES LESS THAN(0), PARTITION p1 VALUES LESS THAN(100));Query OK, 0 rows affected
创建一列为
gbk
, 一列为 utf8
的表。tdsql [test]> CREATE TABLE tbl5 (c1 VARCHAR(10),c2 VARCHAR(10) CHARSET GBK COLLATE gbk_bin) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;Query OK, 0 rows affected
使用自增列作为分区键。
tdsql [test]> CREATE TABLE tbl6(inv_id BIGINT NOT NULL AUTO_INCREMENT,c1 BIGINT,PRIMARY KEY (inv_id) ) PARTITION BY HASH(inv_id) PARTITIONS 8;Query OK, 0 rows affected
创建带
CHECK
约束的表,并查看约束信息。tdsql [test]> CREATE TABLE tbl7 (col1 INT, col2 INT, col3 INT, CONSTRAINT equal_check1 CHECK(col1 = col3 * 2));Query OK, 0 rows affectedtdsql [test]> SHOW CREATE TABLE tbl7;+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| tbl10 | CREATE TABLE `tbl7` (`col1` int DEFAULT NULL,`col2` int DEFAULT NULL,`col3` int DEFAULT NULL,CONSTRAINT `equal_check1` CHECK ((`col1` = (`col3` * 2)))) ENGINE=ROCKSDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set
创建绑定分区亲和性策略的表。
# 创建分区亲和性策略tdsql [test]> create partition policy pp2 partition by hash(int) partitions 4;Query OK, 0 rows affected# 建表tdsql [test]> create table tbl8(id INT) partition by hash(id) partitions 4 using partition policy pp2;Query OK, 0 rows affected