全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件

CREATE TABLE

更新时间:2017-06-07 13:26:11

该语句用于在OceanBase数据库中创建新表。

格式

CREATE TABLE [IF NOT EXIST] tblname 
(create_definition,...)
[table_options] 
[partition_options];

CREATE TABLE [IF NOT EXISTS] tblname
  LIKE oldtblname;

create_definition: 
   colname column_definition
   | PRIMARY KEY (index_col_name[, index_col_name...]) [index_option]... 
   | {INDEX|KEY} [indexname] (index_col_name,...) [index_option]...
   | UNIQUE {INDEX|KEY} [indexname] (index_col_name,...) [index_option]... 

column_definition: 
     data_type [NOT NULL | NULL] [DEFAULT defaultvalue] 
      [AUTO_INCREMENT] [UNIQUE [KEY]] | [[PRIMARY] KEY] 
      [COMMENT 'string'] 

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] 
  | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] 
  | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] 
  | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] 
  | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL] 
  | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL] 
  | DATE
  | TIME[(fsp)] 
  | TIMESTAMP[(fsp)] 
  | DATETIME[(fsp)] 
  | YEAR
  | CHAR[(length)] 
      [CHARACTER SET charsetname] [COLLATE collationname] 
  | VARCHAR(length) 
      [CHARACTER SET charsetname] [COLLATE collationname] 
  | BINARY[(length)] 
  | VARBINARY(length)
index_col_name: 
     colname [(length)] [ASC | DESC](OceanBase1.0暂不支持前缀索引)

index_option: 
    GLOBAL [LOCAL] 
    |COMMENT 'string'
    |COMPRESSION [=] '{NONE | LZ4_1.0 | LZO_1.0 | SNAPPY_1.0 | ZLIB_1.0}'
    |BLOCK_SIZE [=] size
    |STORING(columname_list)

table_options: 
     table_option [[,] table_option]...

table_option: 
    [DEFAULT] { CHARACTER SET | CHARSET } [=] value
    | [DEFAULT] COLLATE [=] collationname
    | COMMENT [=] 'comment string' 
    | COMPRESSION [=] '{NONE | LZ4_1.0 | LZO_1.0 | SNAPPY_1.0 | ZLIB_1.0}'
    | EXPIRE_INFO [=] (expr)
    | REPLICA_NUM [=] num
    | TABLE_ID [=] id
    | BLOCK_SIZE [=] size
    | USE_BLOOM_FILTER [=] {True| False}
    | PROGRESSIVE_MERGE_NUM [=] num
    | TABLEGROUP [=] 'tablegroupname'
    | PRIMARY_ZONE [=] 'zone' 
    | AUTO_INCREMENT [=] num

partition_options: 
     PARTITION BY
         HASH(expr) 
         |KEY(column_list) 
         [PARTITIONS num] 
         [partition_definition ...]

partition_definition:
    COMMENT [=] 'string' (暂不支持)

OceanBase内部数据以b树为索引,按照Primary Key排序。OceanBase 0.4.2及以前版本不允许用户创建只有主键列的表;OceanBase 0.5.0及以上版本支持创建只有主键列的表。OceanBase 1.0可以不指定主键,系统会自动生成。

CREATE TABLE支持UNIQUE约束;暂不支持创建临时表,暂不支持CHECK约束;不支持创建表的同时从其他表导入功能。

  • 使用“IF NOT EXISTS”时,即使创建的表已经存在,也不会报错,如果不指定时,则会报错。
  • “data_type”请参见数据类型章节。
  • NOT NULL,DEFAULT,AUTO_INCREMENT用于列的完整性约束。
  • “table_option”内容参考下表,各子句间用“,”隔开。
  • “index_option”中,可以指定GLOBAL,LOCAL关键字,表述全局或局部索引。默认是GLOBAL index。创建带有Parition的表时index一定要加LOCAL关键字。如果没有加,系统将报错。

    参数 含义 举例
    CHARACTER SET 指定该表所有字符串的编码,用于对外提供元数据信息。目前仅支持UTF8MB4。 CHARACTER SET = 'utf8mb4'
    COMMENT 添加注释信息。 COMMENT='create by Bruce'
    COMPRESSION 存储数据时使用的压缩方法名,目前提供的方法有以下几种:
    · none(默认值,表示不作压缩)
    · LZ4_1.0
    · LZO_1.0
    · SNAPPY_1.0
    · ZLIB_1.0
    COMPRESSION = 'NONE'
    EXPIRE_INFO 在MemTable中的动态数据和SSTable中的静态数据合并时,满足表达式的行会自动删除。
    一般可用于自动删除过期数据。
    expire_info c1 < date_add(merging_frozen_time(),interval -1 HOUR);
    merging_frozen_time()表示当前最新的合并时间,此函数只适用于过期条件。
    TABLE_ID 指定表的ID。如果指定的table_id小于50000,需要打开RootServer的配置项开关“enable_sys_table_ddl”,普通用户不建议指定。 TABLE_ID =4000
    BLOCK_SIZE 设置Partition的微块大小。 默认为16K。
    USE_BLOOM_FILTER 对本表读取数据时,是否使用Bloom Filter。
    · False:默认值,不使用。
    · True:使用。
    USE_BLOOM_FILTER = False
    PROGRESSIVE_MERGE_NUM 设置渐近合并步数。
    PROGRESSIVE_MERGE_NUM现在在限制是1~64。
    默认值为1。
    PROGRESSIVE_MERGE_NUM = 5
    TABLEGROUP 表所属表格组。
    REPLICA_NUM 这个表的partition总副本数,默认值为3。 REPLICA_NUM = 3
    ZONE_LIST 集群列表
    PRIMARY_ZONE 主集群。
    AUTO_INCREMENT 自增字段初始值 AUTO_INCREMENT = 5

AUTO_INCREMENT基本说明

在OceanBase中可以把表中的数据类型为整数型的某个字段定义为自增属性AUTO_INCREMENT,数据库会自动递增方式生产唯一值。

允许给TINYINT、SMALLINT、MEDIUMINT、INT、INTEGER、BIGINT各种整数类型的字段指定AUTO_INCREMENT,其它数据类型的字段不能指定AUTO_INCREMENT。

一个表只允许有一个属性为AUTO_INCREMENT的字段。

Oceanbase>create table t1 (id int auto_increment,name varchar(20) primary key); 
Query OK, 0 rows affected (0.01 sec)
举例

例1:

执行以下命令,创建数据库表。

ceanbase>CREATE TABLE test (c1 int primary key, c2 varchar(10)) REPLICA_NUM = 3, COMPRESSION = 'NONE';
Query OK, 0 rows affected (0.40 sec)

执行命令查看表信息,如:

Oceanbase>describe test;
+-------+-------------+------+------+---------+-------+
| Field | Type        | Null | Key  | Default | Extra |
+-------+-------------+------+------+---------+-------+
| c1    | int(11)     | NO   | PRI  | NULL    |       |
| c2    | varchar(10) | YES  |      | NULL    |       |
+-------+-------------+------+------+---------+-------+
2 rows in set (0.01 sec)

例2:

Oceanbase>CREATE TABLE example_2(custid INT,
thedate TIMESTAMP, cost INT, PRIMARY KEY(custid, thedate)) 
EXPIRE_INFO = (thedate < date_sub(merging_frozen_time(), INTERVAL 2 DAY)),  USE_BLOOM_FILTER = FALSE;
Query OK, 0 rows affected (0.11 sec)

(thedate < date_sub(merging_frozen_time(), INTERVAL 2 DAY)),表示删除(过期)thedate字段值为2天前的数据,删除数据动作在数据合并时候真正执行。其中 merging_frozen_time()表示当前最新的合并时间。(merging_frozen_time()只能放在过期条件中使用)

本文导读目录