閱讀309 返回首頁    go 財經資訊


CREATE TABLE__數據定義語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲

該語句用於在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()隻能放在過期條件中使用)

最後更新:2016-11-24 11:23:47

  上一篇:go DROP DATABASE__數據定義語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲
  下一篇:go ALTER TABLE__數據定義語言_SQL語法參考_雲數據庫 OceanBase-阿裏雲