标准语法

CREATE TABLE [ IF NOT EXISTS ] table_name
( { column_name column_definition | table_constraints } [, ... ]  )
DISTRIBUTE_KEY (column_name)
[table_attribute]
DROP TABLE table_name
说明 在HybridDB for MySQL中创建表,必须指定分区键。

表定义示例:

CREATE TABLE mytable (
    id bigint(20) NOT NULL AUTO_INCREMENT,
    name varchar(128) NOT NULL,
    ts timestamp DEFAULT CURRENT_TIMESTAMP,
    title varchar(256) DEFAULT NULL,
    content text DEFAULT NULL,
    view_count int DEFAULT 0,
    PRIMARY KEY (id),
    KEY idx_name(name)
) DEFAULT CHARSET=utf8 
  DISTRIBUTE_KEY (name);

表定义说明:

  • tablename表名不得超过32字节,只能使用英文字母、阿拉伯数字和下划线’_’;
  • columnname列名不得超过32字节,只能使用英文字母、阿拉伯数字和下划线’_’;
  • 暂不支持更新UPDATE主键(PRIMARY KEY)和分区键(DISTRIBUTE_KEY)的值;若需要变更主键和分区键的值,需要先 DELETE 后重新 INSERT;
  • 最多支持512个列;
  • 一行数据的大小不得超过16MB;
  • 表名和列名不得选用关键字,如果必须使用,则在使用时必须为表名和列名加入反引号(`)(注意不是单引号’)。

支持的数据类型data_type:

TINYINT[(length)] [UNSIGNED] [ZEROFILL]
SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
INT[(length)] [UNSIGNED] [ZEROFILL]
INTEGER[(length)] [UNSIGNED] [ZEROFILL]
BIGINT[(length)] [UNSIGNED] [ZEROFILL]
DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]
NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]
CHAR[(length)] [BINARY]
VARCHAR(length) [BINARY]
DATE
TIME
DATETIME
TIMESTAMP
TINYTEXT [BINARY]
TEXT [BINARY]
MEDIUMTEXT [BINARY]
LONGTEXT [BINARY]
BOOL
BOOLEAN

列定义column_definition

column_definition:
    data_type [ { NOT NULL | NULL } ][ DEFAULT default_expr ]
    [ AUTO_INCREMENT ][ { [ UNIQUE | PRIMARY ] KEY } ]
    [ COMMENT column_comment ]
说明
  • 列注释column_comment不得使用任何英文字符外的注释。
  • AUTO_INCREMENT自增字段指明该列为唯一值,该列必须为BIGINT类型,分布式数据库会自动为该列生成一个64位的唯一值,且该字段将自动成为主键,对于表的字段,若用户插入该字段,那么数据库将存储用户提供的值,用户需要自行保证该值的唯一性,否则可能在多个分区上出现相同的值,引发冲突;若用户插入NULL,或者不插入该字段,那么数据库将为用户生成该字段的值,数据库将自行保证该值的唯一性。

表约束table_constraints:

[ KEY index_name( index_column_name [, ... ] ) ]
[ UNIQUE KEY index_name( index_column_name [, ... ] ) ]
[ PRIMARY KEY ( column_name [, ... ] )  ]
index_column_name:
    column_name [(length)] [ASC | DESC]
说明
  • 用户的表必须指定一个主键,否则在迁入数据时有可能出现重复数据;
  • 创建的索引必须要有一个索引名字;
  • 主键(PRIMARY KEY)暂不支持更新;若需要变更主键数据,需要先删除后,再重新插入;
  • 唯一键(UNIQUE KEY)仅允许事先创建,通过UNIQUE INDEX index_name (col1, col2, col3, …)方式指定。主键和唯一键仅支持分区内的唯一性,不支持全局唯一性。若要保证全局唯一性,请将主键或唯一键的一个字段指定为分区键。

表分区

DISTRIBUTE_KEY (column_name)
说明
  1. 当前必须在DDL内指定分区键,分区键仅支持指定一个列,该列的数据类型只能为整数(TINYINT, SMALLINT, MEDIUMINT, INTEGER, BIGINT)或字符型(CHAR, VARCHAR)中的一种,数据按照分区键维度分散到各个分区中;
  2. 分区键(DISTRIBUTE_KEY)暂不支持更新UPDATE;若需要变更分区键数据,需要先 DELETE 后重新 INSERT。

表属性table_attribute:

[ DEFAULT CHARSET = table_charset ]
[ COMMENT table_comment ]
说明
  • 表注释table_comment不得使用任何英文字符外的注释;
  • 字符集仅支持utf8。

不支持的约束检查:

  • 唯一性约束:允许用户建立主键和唯一性索引,但是不保证它们的全局唯一性,仅保证自增主键的全局唯一性;
  • 外键约束;
  • CHECK约束。

系统库和系统表:

目前并未开放任何系统库和系统表,包括information_schema等。

查看表定义

标准语法:

SHOW CREATE TABLE table_name
DESC table_name
DESC table_name DISTRIBUTE INFO

参数说明:

  • SHOW CREATE TABLE table_name 用于展示表的基础表定义,此表定义当前不含分区键定义;
  • DESC table_name 用于展示表的所有列名,列定义中不含分区键定义;
  • DESC table_name DISTRIBUTE INFO 用于展示表的分区键。