CREATE TABLE

功能描述

在当前数据库中创建一个新的空白表,该表由命令执行者所有。

注意事项

  • 本章节只包含dolphin新增的语法,原openGauss的语法未做删除和修改。

语法格式

通过无括号like创建表。

CREATE [ [ GLOBAL | LOCAL ] [ TEMPORARY | TEMP ] | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name LIKE source_table [ like_option [...] ]
  • like后不能添加普通建表的额外可选语句。
  • table前不能添加foreign选项,包括外表、mot表的创建。
  • 默认复制源表的索引,若不希望复制索引,需要手动指定EXCLUDING INDEXES。
  • 默认复制源分区表的分区,若不希望复制分区,需要手动指定EXCLUDING PARTITION。
  • 对于含索引的分区表,若只指定EXCLUDING PARTITION,由于默认复制分区,将会报错,因为普通表不支持分区索引。
  • 只支持复制range分区表的分区,对于hash、list分区表,由于默认复制分区,会直接报错,需要手动指定EXCLUING PARTITION。二级分区只支持复制range-range分区,处理方法同上。

创建表。

CREATE [ [ GLOBAL | LOCAL ] [ TEMPORARY | TEMP ] | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name 
    ({ column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]
        | table_constraint
        | table_indexclause
        | LIKE source_table [ like_option [...] ] }
        [, ... ])
    [ AUTO_INCREMENT [ = ] value ]
    [ WITH ( {storage_parameter = value} [, ... ] ) ]
    [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
    [ COMPRESS | NOCOMPRESS ]
    [ TABLESPACE tablespace_name ]
    [ COMMENT {=| } 'text' ];
    [ create_option ]

其中create_option为:

        [ WITH ( {storage_parameter = value} [, ... ] ) ]
        [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
        [ COMPRESS | NOCOMPRESS ]
        [ TABLESPACE tablespace_name ]
        [ COMPRESSION [=] compression_arg ]
        [ ENGINE [=] engine_name ]
        [ COLLATE [=] collation_name ]
        [ [DEFAULT] { CHARSET | CHARACTER SET } [=] charset_name ]
        [ ROW_FORMAT [=] row_format_name ]

    除了WITH选项外允许输入多次同一种create_option,以最后一次的输入为准。
  • 创建表上索引table_indexclause:

    {INDEX | KEY} [index_name] [index_type] (key_part,...)[index_option]...
    

    该语法不支持CREATE FOREIGN TABLE (MOT表等) 创建。

  • 其中参数index_type为:

    USING {BTREE | HASH | GIN | GIST | PSORT | UBTREE}
    
  • 其中参数key_part为:

    {col_name[(length)] | (expr)} [ASC | DESC]
    

    length为前缀索引。

  • 其中参数index_option为:

    index_option:{
    	  COMMENT 'string'
    	| index_type
    }
    

    COMMENT、index_type 的顺序和数量任意,但相同字段仅最后一个值生效。

  • 其中like选项like_option为:

    { INCLUDING | EXCLUDING } { DEFAULTS | GENERATED | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | ALL }
    

参数说明

  • data_type

    字段的数据类型。

    对枚举类型ENUM,以及CHAR, CHARACTER, VARCHAR, TEXT等字符类型,创建表格时可使用关键字CHARSET或CHARACTER SET声明列字符集。目前该特性仅做语法支持,不实现功能。

  • column_constraint

    字段的类型约束中,添加了mysql的ON UPDATE特性,归类于字段类型约束。与DEFAULT属性属于同类约束。该ON UPDATE属性用于,执行UPDATE操作timestamp字段为缺省时,则自动更新timestamp字段的时间截。

    CREATE TABLE table_name(column_name timestamp ON UPDATE CURRENT_TIMESTAMP);
    
  • COLLATE collation

    COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。排序规则可以使用“select * from pg_collation;”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。

    对未被支持的排序规则,数据库将发出警告,并将该列设置为默认的排序规则。

  • { [DEFAULT] CHARSET | CHARACTER SET } [=] charset_name

    用于选择表所使用的字符集;目前该特性仅有语法支持,不实现功能。

  • COLLATE [=] collation_name

    用于选择表所使用的排序规则;目前该特性仅有语法支持,不实现功能。

  • ROW_FORMAT [=] row_format_name

    用于选择表所使用的行存储格式;目前该特性仅有语法支持,不实现功能。

  • AUTO_INCREMENT

    该关键字将字段指定为自动增长列。自动增长列必须是某个索引的第一个字段。

示例

--创建表上索引
openGauss=# CREATE TABLE tpcds.warehouse_t24
(
    W_WAREHOUSE_SK            INTEGER               NOT NULL,
    W_WAREHOUSE_ID            CHAR(16)              NOT NULL,
    W_WAREHOUSE_NAME          VARCHAR(20)                   ,
    W_WAREHOUSE_SQ_FT         INTEGER                       ,
    W_STREET_NUMBER           CHAR(10)                      ,
    W_STREET_NAME             VARCHAR(60)                   ,
    W_STREET_TYPE             CHAR(15)                      ,
    W_SUITE_NUMBER            CHAR(10)                      ,
    W_CITY                    VARCHAR(60)                   ,
    W_COUNTY                  VARCHAR(30)                   ,
    W_STATE                   CHAR(2)                       ,
    W_ZIP                     CHAR(10)                      ,
    W_COUNTRY                 VARCHAR(20)                   ,
    W_GMT_OFFSET              DECIMAL(5,2)                  ,
    key (W_WAREHOUSE_SK)                                    ,
    index idx_ID using btree (W_WAREHOUSE_ID)
);

--创建表上组合索引、表达式索引、函数索引
openGauss=# CREATE TABLE tpcds.warehouse_t25
(
    W_WAREHOUSE_SK            INTEGER               NOT NULL,
    W_WAREHOUSE_ID            CHAR(16)              NOT NULL,
    W_WAREHOUSE_NAME          VARCHAR(20)                   ,
    W_WAREHOUSE_SQ_FT         INTEGER                       ,
    W_STREET_NUMBER           CHAR(10)                      ,
    W_STREET_NAME             VARCHAR(60)                   ,
    W_STREET_TYPE             CHAR(15)                      ,
    W_SUITE_NUMBER            CHAR(10)                      ,
    W_CITY                    VARCHAR(60)                   ,
    W_COUNTY                  VARCHAR(30)                   ,
    W_STATE                   CHAR(2)                       ,
    W_ZIP                     CHAR(10)                      ,
    W_COUNTRY                 VARCHAR(20)                   ,
    W_GMT_OFFSET              DECIMAL(5,2)                  ,
    key using btree (W_WAREHOUSE_SK, W_WAREHOUSE_ID desc)   ,
    index idx_SQ_FT using btree ((abs(W_WAREHOUSE_SQ_FT)))  ,
    key idx_SK using btree ((abs(W_WAREHOUSE_SK)+1))
);

--包含index_option字段
openGauss=# create table test_option(a int, index idx_op using btree(a) comment 'idx comment');
--创建表格时对列指定字符集。
openGauss=# CREATE TABLE t_column_charset(c text CHARSET test_charset);
WARNING:  character set "test_charset" for type text is not supported yet. default value set
CREATE TABLE

--创建表格时对表格指定字符序。
openGauss=# CREATE TABLE t_table_collate(c text) COLLATE test_collation;
WARNING:  COLLATE for TABLE is not supported for current version. skipped
CREATE TABLE

--创建表格时对表格指定字符集。
openGauss=# CREATE TABLE t_table_charset(c text) CHARSET test_charset;
WARNING:  CHARSET for TABLE is not supported for current version. skipped
CREATE TABLE

--创建表格时对表格指定行记录格式。
openGauss=# CREATE TABLE t_row_format(c text) ROW_FORMAT test_row_format;
WARNING:  ROW_FORMAT for TABLE is not supported for current version. skipped
CREATE TABLE
意见反馈
编组 3备份
    openGauss 2024-04-18 00:48:14
    取消