---
title: "CREATE TABLEGROUP - OceanBase 数据库 V4.3.4 | OceanBase 文档中心"
description: CREATE TABLEGROUP 描述 该语句用来创建表组。 表组主要用于创建一组具有相同分布特征的表，具有相同分布特征的表在进行连接操作时，可以在本地进行，避免跨节点的数据请求。 创建表组需要当前用户拥有全局 CREATE （ *.* ）权限。 语法 CREATE TABLEGROUP tablegroup_na…
---
切换语言

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

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

# CREATE TABLEGROUP

更新时间：2024-12-08 23:00:00

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.4/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/600.sql-statement-of-mysql-mode/2700.create-tablegroup-of-mysql-mode.md)  

## 描述

该语句用来创建表组。

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

创建表组需要当前用户拥有全局 `CREATE`（`*.*`）权限。

## 语法

```sql
CREATE TABLEGROUP tablegroup_name [tablegroup_option];

tablegroup_option:
   SHARDING = 'NONE' | 'PARTITION' | 'ADAPTIVE'

```

## 参数解释

| **参数** | **描述** |
| --- | --- |
| tablegroup_name | 表组名称，最长 64 个字符，字符只能有大小写英文字母，数字和下划线，而且必须以字母或下划线开头，并且不能使用 OceanBase 数据库的关键字。如果要创建的表组名称已存在，并且没有指定 `IF NOT EXISTS`，则会出现错误。 |
| SHARDING | 表组的属性。如果不指定 `SHARDING` 属性，则默认创建 `ADAPTIVE` 的表组。`SHARDING` 取值如下：   - `NONE`：对加入表组的表没有限制。 - `PARTITION`：加入表组的表对应的一级分区，需要与表组中所有表的一级分区的分区方式一致，包括分区类型、分区个数和分区值。 - `ADAPTIVE`：加入表组的表对应的一级分区和二级分区，需要与表组中所有表的一级分区和二级分区的分区方式一致，包括分区类型、分区个数和分区值。加入表组中的表必须只能为同一类分区表（一级分区表或者二级分区表）  相同的分区方式包括：   - 分区类型相同（例如都是 Hash+Range 分区）。 - 如果是 Hash 分区，要求引用的列数相同，并且分区个数相同。 - 如果是 Range 分区，要求引用的列数相同，并且分区数相同，Range 分割点相同。  对于二级分区，根据其分区类型，要求和上述一致。 |

## 示例

- 创建名为 `myTableGroup1` 的表组，并将非分区表 `myt1` 和 `myt2` 加入到表组中。

  ```shell
  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

  ```
 - 创建名为 `tblgroup1` 的表组，其 `SHARDING` 属性为 `NONE`，并将非分区表 `tbl1` 、一级分区表 `tbl2`、二级分区表 `tbl3` 加入到表组中。

  ```shell
  obclient> CREATE TABLEGROUP tblgroup1 SHARDING = 'NONE';
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl1 (col INT) TABLEGROUP = tblgroup1;
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl2 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup1
      PARTITION BY LIST(col1)
        (PARTITION p0 VALUES IN (1, 2, 3),
         PARTITION p1 VALUES IN (5, 6),
         PARTITION p2 VALUES IN (DEFAULT)
         );
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl3(col1 INT,col2 varchar(50)) TABLEGROUP = tblgroup1
      PARTITION BY LIST(col1) SUBPARTITION BY LIST COLUMNS(col2)
     (PARTITION p0 VALUES in (01)
        (SUBPARTITION mp0 VALUES in ('01'),
         SUBPARTITION mp1 VALUES in ('02'),
         SUBPARTITION mp2 VALUES in ('03')),
      PARTITION p1 VALUES in (02)
        (SUBPARTITION mp3 VALUES in ('01'),
         SUBPARTITION mp4 VALUES in ('02'),
         SUBPARTITION mp5 VALUES in ('03'))
       );
  Query OK, 0 rows affected

  ```
 - 创建名为 `tblgroup2` 的表组，其 `SHARDING` 属性为 `PARTITION`，并将分区表 `tbl1` 和分区表 `tbl2` 加入到表组中，两者的分区方式一致。

  ```shell
  obclient> CREATE TABLEGROUP tblgroup2 SHARDING = 'PARTITION';
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl1 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup2
      PARTITION BY LIST(col1)
        (PARTITION p0 VALUES IN (1, 2, 3),
         PARTITION p1 VALUES IN (5, 6),
         PARTITION p2 VALUES IN (DEFAULT)
        );
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl2 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup2
    PARTITION BY LIST(col1)
      (PARTITION p0 VALUES IN (1, 2, 3),
       PARTITION p1 VALUES IN (5, 6),
       PARTITION p2 VALUES IN (DEFAULT)
       );
  Query OK, 0 rows affected

  ```
 - 创建名为 `tblgroup3` 的表组，其 `SHARDING` 属性为 `PARTITION`，非分区表 `tbl1` 和分区表 `tbl2` 不能同时加入到该表组中。

  ```shell
  obclient> CREATE TABLEGROUP tblgroup3 SHARDING = 'PARTITION';
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl1 (col INT) TABLEGROUP = tblgroup3;
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl2 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup3
      PARTITION BY LIST(col1)
        (PARTITION p0 VALUES IN (1, 2, 3),
         PARTITION p1 VALUES IN (5, 6),
         PARTITION p2 VALUES IN (DEFAULT)
         );
  ERROR 4179 (HY000): not all tables are non-partitioned or partitioned, add table to tablegroup not allowed

  ```
 - 创建名为 `tblgroup4` 的表组，其 `SHARDING` 属性为 `PARTITION`，分区表 `tbl1` 和分区表 `tbl2` 的分区值不一致，不能同时加入到表组中。

  ```shell
  obclient> CREATE TABLEGROUP tblgroup4 SHARDING = 'PARTITION';
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl1 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup4
      PARTITION BY LIST(col1)
        (PARTITION p0 VALUES IN (1, 2, 3),
         PARTITION p1 VALUES IN (5, 6),
         PARTITION p2 VALUES IN (DEFAULT)
         );
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl2 (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) TABLEGROUP = tblgroup4
      PARTITION BY LIST(col1)
        (PARTITION p0 VALUES IN (1, 2, 3),
         PARTITION p1 VALUES IN (5, 7),
         PARTITION p2 VALUES IN (DEFAULT)
         );
  ERROR 4179 (HY000): list_part partition value not equal, add table to tablegroup not allowed

  ```
 - 创建名为 `tblgroup5` 的表组，其 `SHARDING` 属性为 `ADAPTIVE`，并将分区表 `tbl1` 和分区表 `tbl2` 加入到表组中，两者的分区方式一致。

  ```shell
  obclient> CREATE TABLEGROUP tblgroup5 SHARDING = 'ADAPTIVE';
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl1(col1 INT,col2 VARCHAR(50)) TABLEGROUP = tblgroup5
      PARTITION BY LIST(col1) SUBPARTITION BY LIST COLUMNS(col2)
        (PARTITION p0 VALUES in (01)
           (SUBPARTITION mp0 VALUES in ('01'),
            SUBPARTITION mp1 VALUES in ('02'),
            SUBPARTITION mp2 VALUES in ('03')),
         PARTITION p1 VALUES in (02)
           (SUBPARTITION mp3 VALUES in ('01'),
            SUBPARTITION mp4 VALUES in ('02'),
            SUBPARTITION mp5 VALUES in ('03'))
        );
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl2(col1 INT,col2 VARCHAR(50)) TABLEGROUP = tblgroup5
      PARTITION BY LIST(col1) SUBPARTITION BY LIST COLUMNS(col2)
        (PARTITION p0 VALUES in (01)
           (SUBPARTITION mp0 VALUES in ('01'),
            SUBPARTITION mp1 VALUES in ('02'),
            SUBPARTITION mp2 VALUES in ('03')),
         PARTITION p1 VALUES in (02)
           (SUBPARTITION mp3 VALUES in ('01'),
            SUBPARTITION mp4 VALUES in ('02'),
            SUBPARTITION mp5 VALUES in ('03'))
         );
  Query OK, 0 rows affected

  ```
 - 创建名为 `tblgroup6` 的表组，其 `SHARDING` 属性为 `ADAPTIVE`，非分区表 `tbl1` 和分区表 `tbl2` 不能同时加入到表组中。

  ```shell
  obclient> CREATE TABLEGROUP tblgroup6 SHARDING = 'ADAPTIVE';
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl1 (col int) TABLEGROUP = tblgroup6;
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl2(col1 INT,col2 VARCHAR(50)) TABLEGROUP = tblgroup6
      PARTITION BY LIST(col1) SUBPARTITION BY LIST COLUMNS(col2)
        (PARTITION p0 VALUES in (01)
           (SUBPARTITION mp0 VALUES in ('01'),
            SUBPARTITION mp1 VALUES in ('02'),
            SUBPARTITION mp2 VALUES in ('03')
         ),
        PARTITION p1 VALUES in (02)
           (SUBPARTITION mp3 VALUES in ('01'),
            SUBPARTITION mp4 VALUES in ('02'),
            SUBPARTITION mp5 VALUES in ('03'))
         );
  ERROR 4179 (HY000): not all tables are non-partitioned or partitioned, add table to tablegroup not allowed

  ```
 - 创建名为 `tblgroup7` 的表组，其 `SHARDING` 属性为 `ADAPTIVE`，由于分区表 `tbl1` 和分区表 `tbl2` 的一级分区的分区类型相同，二级分区分区类型不同（二级分区个数不同），所以不能同时加入到表组中。

  ```shell
  obclient> CREATE TABLEGROUP tblgroup7 SHARDING = 'ADAPTIVE';
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl1(col1 INT,col2 VARCHAR(50)) TABLEGROUP = tblgroup7
      PARTITION BY LIST(col1) SUBPARTITION BY LIST COLUMNS(col2)
        (PARTITION p0 VALUES in (01)
          (SUBPARTITION mp0 VALUES in ('01'),
            SUBPARTITION mp1 VALUES in ('02'),
            SUBPARTITION mp2 VALUES in ('03')
            ),
         PARTITION p1 VALUES in (02)
            (SUBPARTITION mp3 VALUES in ('01'),
             SUBPARTITION mp4 VALUES in ('02'),
             SUBPARTITION mp5 VALUES in ('03'))
        );
  Query OK, 0 rows affected

  obclient> CREATE TABLE tbl2(col1 INT,col2 VARCHAR(50)) TABLEGROUP = tblgroup7
      PARTITION BY LIST(col1) SUBPARTITION BY LIST COLUMNS(col2)
        (PARTITION p0 VALUES in (01)
           (SUBPARTITION mp0 VALUES in ('01'),
            SUBPARTITION mp1 VALUES in ('02')),
         PARTITION p1 VALUES in (02)
           (SUBPARTITION mp3 VALUES in ('01'),
            SUBPARTITION mp4 VALUES in ('02'))
         );
  ERROR 4179 (HY000): subpartition num not matched, add table to tablegroup not allowed

  ```

## 相关文档

- [ALTER TABLEGROUP](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001577275)
 - [DROP TABLEGROUP](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001577349)
 - [管理表组内的表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001576023)
 - [查看表组信息](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001576017)

 上一篇 下一篇 ![有帮助](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) 咨询热线
