CREATE TABLE

分布式数据库 GaiaDB-X DRDS

  • 术语表
  • 产品定价
  • 产品描述
    • 介绍
    • 优势
    • 基本原理
    • 应用场景
    • 特性
    • 功能发布记录
  • 开发指南
    • 运算符
    • 开发限制
    • 函数
      • 聚合函数
      • 字符串函数
      • 加密与压缩函数
      • 流程控制函数
      • 数学函数
      • 信息函数
      • 转换函数
      • 日期时间函数
      • 比较函数
      • 位函数
    • DDL语句
      • AUTO_INCREMENT
      • DROP TABLE
      • CREATE TABLE
      • RENAME TABLE
      • CREATE DATABASE
      • DROP DATABASE
    • 数据类型
      • 数值类型
      • 字符串类型
      • JSON类型
      • 日期和时间类型
      • Collation类型
    • DML语句
      • INSERT
      • SOURCE
      • REPLACE
      • DELETE
      • UPDATE
  • 重要通知
    • 品牌升级
  • 快速入门
    • 首次使用引导
    • 创建数据库
    • 执行SQL基本操作
    • 创建实例
  • 服务等级协议SLA
    • GaiaDB-X服务等级协议SLA
  • API参考
    • 通用说明
    • 其他接口
    • SampleCode
    • 实例管理接口说明
    • 账号管理接口说明
    • 目录
    • 白名单管理接口说明
    • 数据库管理接口说明
    • 数据表管理接口说明
  • 常见问题
    • 配置类问题
  • 用户指南
    • 备份与恢复
    • 参数设置
    • 登录、创建实例
    • 监控报警
    • 连接云数据库-DRDS-实例
    • 操作指引
    • 连接数据库
    • 节点详情
      • 代理节点
      • 存储节点
        • 存储节点变更配置
        • 存储节点
      • 只读节点
        • 只读节点
        • 释放只读节点
        • 添加只读节点
    • 实例管理
      • 修改实例名称、域名
      • 实例变配
      • 高级设置
      • 增加和减少节点
      • 释放实例
    • 数据库管理
      • 删除数据库
      • 使用限制
      • 创建数据库
      • 管理数据库
    • 账号和安全
      • 修改账号密码
      • 修改权限
      • 管理数据库账号
      • 删除账号
      • 设置白名单
所有文档
menu
没有找到结果,请重新输入

分布式数据库 GaiaDB-X DRDS

  • 术语表
  • 产品定价
  • 产品描述
    • 介绍
    • 优势
    • 基本原理
    • 应用场景
    • 特性
    • 功能发布记录
  • 开发指南
    • 运算符
    • 开发限制
    • 函数
      • 聚合函数
      • 字符串函数
      • 加密与压缩函数
      • 流程控制函数
      • 数学函数
      • 信息函数
      • 转换函数
      • 日期时间函数
      • 比较函数
      • 位函数
    • DDL语句
      • AUTO_INCREMENT
      • DROP TABLE
      • CREATE TABLE
      • RENAME TABLE
      • CREATE DATABASE
      • DROP DATABASE
    • 数据类型
      • 数值类型
      • 字符串类型
      • JSON类型
      • 日期和时间类型
      • Collation类型
    • DML语句
      • INSERT
      • SOURCE
      • REPLACE
      • DELETE
      • UPDATE
  • 重要通知
    • 品牌升级
  • 快速入门
    • 首次使用引导
    • 创建数据库
    • 执行SQL基本操作
    • 创建实例
  • 服务等级协议SLA
    • GaiaDB-X服务等级协议SLA
  • API参考
    • 通用说明
    • 其他接口
    • SampleCode
    • 实例管理接口说明
    • 账号管理接口说明
    • 目录
    • 白名单管理接口说明
    • 数据库管理接口说明
    • 数据表管理接口说明
  • 常见问题
    • 配置类问题
  • 用户指南
    • 备份与恢复
    • 参数设置
    • 登录、创建实例
    • 监控报警
    • 连接云数据库-DRDS-实例
    • 操作指引
    • 连接数据库
    • 节点详情
      • 代理节点
      • 存储节点
        • 存储节点变更配置
        • 存储节点
      • 只读节点
        • 只读节点
        • 释放只读节点
        • 添加只读节点
    • 实例管理
      • 修改实例名称、域名
      • 实例变配
      • 高级设置
      • 增加和减少节点
      • 释放实例
    • 数据库管理
      • 删除数据库
      • 使用限制
      • 创建数据库
      • 管理数据库
    • 账号和安全
      • 修改账号密码
      • 修改权限
      • 管理数据库账号
      • 删除账号
      • 设置白名单
  • 文档中心
  • arrow
  • 分布式数据库 GaiaDB-XDRDS
  • arrow
  • 开发指南
  • arrow
  • DDL语句
  • arrow
  • CREATE TABLE
本页目录
  • 一级分区
  • 使用哈希函数做拆分
  • 使用List方式做拆分
  • 使用Range方式做拆分
  • 二级分区

CREATE TABLE

更新时间:2025-08-21

本文主要介绍使用DDL语句进行建表的语法、子句、参数和基本方式。

语法

Plain Text
1CREATE [SHADOW] TABLE [IF NOTEXISTS] tbl_name
2    (create_definition, ...)
3    [table_options]
4    [partition_options]
5
6create_definition:
7    col_name column_definition
8  | mysql_create_definition
9  | [UNIQUE] GLOBAL INDEX index_name [index_type] (index_sharding_col_name,...)
10      [global_secondary_index_option]
11      [index_option] ...
12# 分表子句
13partition_options:
14    TBPARTITION BY tb_partition_algorithm
15    |global [TBPARTITIONS num]
16    [TBSUBPARTITION BY HASH(col_name)
17      [TBSUBPARTITIONS num]
18    ]
19
20tb_sharding_algorithm:
21    HASH([col_name])
22  | LIST([col_name])
23  | RANGE(col_name)
24  
25# 以下为MySQL DDL语法
26index_sharding_col_name:
27    col_name [(length)] [ASC|DESC]
28
29index_option:
30    KEY_BLOCK_SIZE [=] value| index_type
31  |WITH PARSER parser_name
32  | COMMENT 'string'
33
34index_type:
35    USING {BTREE | HASH}

分布式表子句和参数

  • TBPARTITION BYhash(partition_key):指定分表键和分库算法。
  • TBPARTITIONS num(可选):每个库上的物理表数目(默认为1),如不分表,就不需要指定该字段。

单表

建一张单库单表,不做任何拆分。

Plain Text
1CREATETABLE single_tbl(
2 id bigintnotnull auto_increment, 
3 name varchar(30), 
4 primary key(id)
5);

查看逻辑表的节点拓扑,可以看出只在0分片创建了一张子表。

Plain Text
1show topology from single_tbl;
2+----+----------------------+----------------------+
3| id | group_name           | table_name           |
4+----+----------------------+----------------------+
5|  0 | drdse48oscmt2b0_0000 | single_tbl__tablet_0 |
6+----+----------------------+----------------------+
71 row in set (0.00 sec)

分布式表

GaiaDB-X 支持一级分区和二级分区方式拆分数据表,一级分区支持HASH/LIST/RANGE分区策略,二级分区支持HASH分区策略。

说明: 使用二级分区时,需要确保一级分区也采用HASH分区策略。

一级分区

使用哈希函数做拆分

建一张分布式表,拆分表的方式为按照ID列进行哈希,将逻辑表hash_tb拆分成4个物理子表,并将子表分布到多个分片中。

Plain Text
1create table hash_tb(
2id int,name varchar(30) DEFAULT NULL,
3create_time datetime DEFAULT NULL,
4primary key(id)
5) tbpartition by hash(id) tbpartitions 4;

以2分片为例,执行以下命令查看子表的物理分布:

Plain Text
1show topology from hash_tb;
2+----+----------------------+-------------------+
3| id | group_name           | table_name        |
4+----+----------------------+-------------------+
5|  0 | drdse48oscmt2b0_0000 | hash_tb__tablet_0 |
6|  1 | drdse48oscmt2b0_0001 | hash_tb__tablet_1 |
7|  2 | drdse48oscmt2b0_0000 | hash_tb__tablet_2 |
8|  3 | drdse48oscmt2b0_0001 | hash_tb__tablet_3 |
9+----+----------------------+-------------------+
104 rows in set (0.01 sec)

使用List方式做拆分

分布式 List 表:

Plain Text
1CREATE TABLE tblist (
2    id INT NOT NULL,
3    store_id INT
4) TBPARTITION BY LIST(store_id) TBPARTITIONS 4(
5    (1,5,6),
6    (2,7,8),
7    (3,9,10),
8    (4,11,12)
9);

使用Range方式做拆分

分布式 Range 表:

Plain Text
1CREATE TABLE range_tb (
2    id INT NOT NULL,
3    fname VARCHAR(30),
4    lname VARCHAR(30),
5    hired DATE NOT NULL DEFAULT '1970-01-01',
6    separated DATE NOT NULL DEFAULT '9999-12-31',
7    job_code INT NOT NULL,
8    store_id INT NOT NULL
9)TBPARTITION BY RANGE (store_id)  tbpartitions 3(
10    TBPARTITION p0 VALUES LESS THAN (6),
11    TBPARTITION p1 VALUES LESS THAN (11),
12    TBPARTITION p2 VALUES LESS THAN (21)
13);

二级分区

二级分区仅支持 HAHS 分区策略,

Plain Text
1CREATE TABLE hash_tb(
2id int,sid int, name varchar(30) DEFAULT NULL,
3create_time datetime DEFAULT NULL,
4primary key(id)
5) 
6TBPARTITION BY hash(id) TBPARTITIONS 4
7TBSUBPARTITION BY HASH(sid) TBSUBPARTITIONS 2;

广播表创建

子句 TBPARTITION BY GLOBLE 用来指定创建广播表。广播表是指将这个表复制到每个分片上,在分片上通过同步机制实现数据一致,有秒级延迟。这样做的好处是可以将JOIN操作下推到底层的存储节点来避免跨库JOIN。

Plain Text
1create table global_tbl(
2province_id int(11) NOT NULL AUTO_INCREMENT, 
3province_name varchar(32) DEFAULT NULL, 
4PRIMARY KEY(province_id) 
5) tbpartition by global;

以2分片为例,执行以下命令查看广播表的物理分布:

Plain Text
1show topology from global_tbl;
2+----+----------------------+----------------------+
3| id | group_name           | table_name           |
4+----+----------------------+----------------------+
5|  0 | drdse48oscmt2b0_0000 | global_tbl__tablet_0 |
6|  1 | drdse48oscmt2b0_0001 | global_tbl__tablet_1 |
7+----+----------------------+----------------------+
82 rows in set (0.00 sec)

其他MySQL建表属性

Plain Text
1CREATE TABLE mysql_tbl(
2  id bigint not null, 
3  name varchar(30), 
4  primary key(id)
5) ENGINE=InnoDB DEFAULT CHARSET=utf8 tbpartition by hash(id) tbpartitions 3;

上一篇
DROP TABLE
下一篇
RENAME TABLE