---
title: "CREATE TABLEGROUP | OceanBase 文档中心"
description: CREATE TABLEGROUP 描述 该语句用来创建表组。 表组主要用于创建一组具有相同分布特征的表，具有相同分布特征的表在进行连接操作时，可以在本地进行，避免跨节点的数据请求。 创建表组时，首先要规划好表组的用途。如果是用于普通表的属性，表组就不用分区；如果是用于分区表的属性，表组就要指定分区策略，并且要跟分区…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.1.4 社区版

# CREATE TABLEGROUP

更新时间：2023-08-03 17:20:32

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V3.1.4/zh-CN/1400.developer-guide/700.sql-reference/500.sql-statements/2000.create-tablegroup.md)  

## 描述

该语句用来创建表组。

表组主要用于创建一组具有相同分布特征的表，具有相同分布特征的表在进行连接操作时，可以在本地进行，避免跨节点的数据请求。

创建表组时，首先要规划好表组的用途。如果是用于普通表的属性，表组就不用分区；如果是用于分区表的属性，表组就要指定分区策略，并且要跟分区表的分区策略保持一致。

> **说明**
>
>  
>
> 只有租户下的管理员权限才可以创建表组。

向表组中添加表的前提是表的分区策略跟表组的分区策略保持一致。

此外，表组的 `BINDING` 属性需要为 `FALSE`，您可以通过以下语句查看表组的属性。

您可以通过修改表的表组属性将表添加到表组，也可以直接向表组中添加表。

- 修改表的表组属性：

  ```sql
  obclient> ALTER TABLE $table tablegroup=$tbgroup;
  Query OK, 0 rows affected

  ```
 - 向表组中添加表：

  ```sql
  obclient> ALTER TABLEGROUP $tbgroup ADD $table;
  Query OK, 0 rows affected

  ```

## 语法

创建模版化二级分区表组的语法如下：

```sql
CREATE TABLEGROUP [IF NOT EXISTS] tablegroupname [opt_tablegroup_option_list] [opt_tg_partition_option]

opt_tablegroup_option_list:
tablegroup_option [tablegroup_option]

tablegroup_option:
      LOCALITY [=] locality_name
    | PRIMARY_ZONE [=] primary_zone_name

opt_tg_partition_option:
    PARTITION BY
      KEY COLUMN_NUM [tg_subpartition_option] PARTITIONS INTNUM
    | HASH [tg_subpartition_option] PARTITIONS INTNUM
    | RANGE [tg_subpartition_option]
          {PARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
    | RANGE COLUMNS COLUMN_NUM [tg_subpartition_option]
          {PARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
    | LIST [tg_subpartition_option]
          {PARTITION partition_name VALUES in list_partition_expr, ...}
    | LIST COLUMNS COLUMN_NUM [tg_subpartition_option]
          {PARTITION partition_name VALUES in list_partition_expr, ...}

tg_subpartition_option:
SUBPARTITION BY
      RANGE SUBPARTITION TEMPLATE
          {SUBPARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
    | RANGE COLUMNS COLUMN_NUM SUBPARTITION TEMPLATE
          {SUBPARTITION partition_name VALUES LESS THAN range_partition_expr, ...}
    | HASH [SUBPARTITIONS INTNUM]
    | KEY COLUMN_NUM [SUBPARTITIONS INTNUM]
    | LIST SUBPARTITION TEMPLATE
          {SUBPARTITION partition_name VALUES in list_partition_expr, ...}
    | LIST COLUMNS COLUMN_NUM SUBPARTITION TEMPLATE
          {SUBPARTITION partition_name VALUES in list_partition_expr, ...}

```

## 参数解释

| **参数** | **描述** |
| --- | --- |
| tablegroupname | 表组名称，最长 64 个字符，字符只能有大小写英文字母，数字和下划线，而且必须以字母或下划线开头，并且不能使用 OceanBase 数据库的关键字。 如果要创建的表组名称已存在，并且没有指定 `IF NOT EXISTS`，则会出现错误。 |
| opt_tablegroup_option_list | 表组的分区方式、Locality、Primary Zone 必须和组内的表完全一致。   - 相同的 Locality：指副本类型、个数、位置要完全一致 - 相同的 Primary zone：指 Leader 位置及其优先级要完全一致 - 相同的分区方式：      - 分区类型相同（例如，都是 `HASH`+`RANGE` 分区）。     - 如果是 `KEY` 分区，要求引用的列数相同，且分区个数相同。     - 如果是 `HASH` 分区，要求分区个数相同。     - 如果是 `RANGE COLUMNS` 分区，要求引用的列数相同，且分区数相同，且 `RANGE` 分割点相同。     - 如果是 `RANGE` 分区，且分区数相同，且 `RANGE` 分割点相同。     - 对于二级分区，根据分区类型，要求与上面一致。    > **注意**   >  组内的表信息不能独立变更某一项，只可以通过操作表组进行批量操作。 |
| opt_tg_partition_option | 表组的分区规则定义，与 `CREATE TABLE` 使用同样的分区方式。 表组没有具体的列定义，所以 `KEY`、`RANGE COLUMNS`、`LIST COLUMNS` 不需要写出具体的列，只需要指定列个数（`COLUMN_NUM`）。 |

## 示例

- 创建名为 `myTableGroup1` 的表组。

  ```sql
  obclient> CREATE TABLEGROUP myTableGroup1;
  Query OK, 0 rows affected

  obclient> CREATE TABLE myt1 (c1 int, c2 int ) TABLEGROUP = myTableGroup1;
  Query OK, 0 rows affected

  obclient> CREATE TABLE myt2 (c1 int, c2 int ) TABLEGROUP = myTableGroup1;
  Query OK, 0 rows affected

  ```
 - 创建 `HASH` 分区的表组 `tgh`，同时创建 `HASH` 分区的表 `ttgh` 与 `ttgh2` 且分区个数相同。

  ```sql
  obclient> CREATE TABLEGROUP tgh PARTITION BY HASH PARTITIONS 10;
  Query OK, 0 rows affected

  obclient> CREATE TABLE ttgh(c1 INT, c2 INT) PARTITION BY HASH(c1) PARTITIONS 10;
  Query OK, 0 rows affected

  obclient> CREATE TABLE ttgh2(c1 INT, c2 INT) PARTITION BY HASH(c1) PARTITIONS 10;
  Query OK, 0 rows affected

  ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
