---
title: "管理一级分区表 | OceanBase 文档中心"
description: 管理一级分区表 分区表创建成功后，您可以对一级分区表进行添加、删除或 Truncate 分区操作。 各类型分区支持操作情况 分区类型 添加一级分区 删除一级分区 Truncate 一级分区 Range 分区 支持 支持 支持 Range Column 分区 支持 支持 支持 List 分区 支持 支持 支持 List…
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 4.0.0 社区版

# 管理一级分区表

更新时间：2026-06-28 11:20:06

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.0.0/zh-CN/300.developer-guide/200.create-and-manage-database-objects/700.create-and-manage-partition-table/300.manage-level-1-partition-table.md)  

分区表创建成功后，您可以对一级分区表进行添加、删除或 Truncate 分区操作。

## 各类型分区支持操作情况

| 分区类型 | 添加一级分区 | 删除一级分区 | Truncate 一级分区 |
| --- | --- | --- | --- |
| Range 分区 | 支持 | 支持 | 支持 |
| Range Column 分区 | 支持 | 支持 | 支持 |
| List 分区 | 支持 | 支持 | 支持 |
| List Columns 分区 | 支持 | 支持 | 支持 |
| Hash 分区 | 不支持 | 不支持 | 不支持 |
| Key 分区 | 不支持 | 不支持 | 不支持 |

## 添加一级分区

### 语法

```sql
ALTER TABLE table_name ADD PARTITION (partition_option);

partition_option:
  range_partition_option | list_partition_option

range_partition_option:
  ( PARTITION partition_name VALUES LESS THAN partition_expr
   [, PARTITION partition_name VALUES LESS THAN partition_expr]...
  )

list_partition_option:
  (PARTITION partition_name VALUES IN partition_expr
    [, PARTITION partition_name VALUES IN partition_expr]...
   )

```

> **说明**
>
>  
>
> - 对于 Range/Range Columns 分区，只能在最大的分区之后添加一个分区，不可以在中间或者开始的地方添加。如果当前的分区中有 `MAXVALUE` 的分区，则不能继续添加分区。
>  - List/List Columns 分区添加一级分区时，要求添加的分区不与之前的分区冲突即可。如果一个 List/List Columns 分区有默认分区即 `Default Partition`，则不能添加任何分区。
>  - 在 Range/Range Columns/List/List Columns 分区中添加一级分区不会影响全局索引和局部索引的使用。

### 示例

- 向 Range 分区中添加一级分区。创建 Range 分区表 `tbl1_r`，并添加分区 `M197106`。

  ```sql
  obclient> CREATE TABLE tbl1_r (id INT NOT NULL,value varchar(50),time TIMESTAMP NOT NULL)
         PARTITION BY RANGE(UNIX_TIMESTAMP(time))
          (PARTITION M197101 VALUES LESS THAN(UNIX_TIMESTAMP('1971/02/01')),
           PARTITION M197102 VALUES LESS THAN(UNIX_TIMESTAMP('1971/03/01')),
           PARTITION M197103 VALUES LESS THAN(UNIX_TIMESTAMP('1971/04/01')),
           PARTITION M197104 VALUES LESS THAN(UNIX_TIMESTAMP('1971/05/01')),
           PARTITION M197105 VALUES LESS THAN(UNIX_TIMESTAMP('1971/06/01'))
          );
  Query OK, 0 rows affected

  ```

  在 `tbl1_r` 表中添加分区 `M197106`。

  ```unknow
  obclient> ALTER TABLE tbl1_r ADD PARTITION
         (PARTITION M197106 VALUES LESS THAN(UNIX_TIMESTAMP('1971/07/01')));
  Query OK, 0 rows affected

  ```

  在 `tbl1_r` 表中查看已添加的分区 `M197106`。

  ```sql
  obclient> show create table tbl1_r\G
  *************************** 1. row ***************************
         Table: tbl1_r
  Create Table: CREATE TABLE `tbl1_r` (
    `id` int(11) NOT NULL,
    `value` varchar(50) DEFAULT NULL,
    `time` timestamp NOT NULL
  ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
   partition by range(UNIX_TIMESTAMP(time))
  (partition M197101 values less than (1612108800),
  partition M197102 values less than (1614528000),
  partition M197103 values less than (1617206400),
  partition M197104 values less than (1619798400),
  partition M197105 values less than (1622476800),
  partition M197106 values less than (1625068800))
  1 row in set

  ```

  向 `tbl1_log_rc` 表的 `M197106` 分区插入数据。

  ```unknow
  obclient> INSERT INTO tbl1_r VALUES (1,'1','1971/06/02');
  Query OK, 1 row affected

  ```

  查看数据落入的 `M197106` 分区。

  ```unknow
  obclient> SELECT * FROM tbl1_r partition(M197106);
  +----+-------+---------------------+
  | id | value | time                |
  +----+-------+---------------------+
  |  1 | 1     | 1971-06-02 00:00:00 |
  +----+-------+---------------------+
  1 row in set

  ```
 - 向 List 分区中添加一级分区。创建 List 分区表 `tbl1_l2`，并添加分区 `p2` 和 `p3`。

  ```sql
  obclient> CREATE TABLE tbl1_l2 (col1 INT PRIMARY KEY,col2 VARCHAR(50))
         PARTITION BY LIST(col1)
          (PARTITION p0 VALUES IN (1,2,3),
           PARTITION p1  VALUES IN (5,6)
          );
  Query OK, 0 rows affected

  ```

  在 `tbl1_l2` 表中添加分区 `p2` 与 `p3`。

  ```unknow
  obclient> ALTER TABLE tbl1_l2 ADD PARTITION
         (PARTITION p2 VALUES IN (7,8),
          PARTITION p3  VALUES IN (DEFAULT)
         );
  Query OK, 0 rows affected

  ```

  在 `tbl1_r` 表中查看已添加的分区 `p2` 与 `p3`。

  ```sql
  obclient> show create table tbl1_l2\G
  *************************** 1. row ***************************
         Table: tbl1_l2
  Create Table: CREATE TABLE `tbl1_l2` (
    `col1` int(11) NOT NULL,
    `col2` varchar(50) DEFAULT NULL,
    PRIMARY KEY (`col1`)
  ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
   partition by list(col1)
  (partition p0 values in (1,2,3),
  partition p1 values in (5,6),
  partition p2 values in (7,8),
  partition p3 values in (DEFAULT))
  1 row in set

  ```

  向 `tbl1_l2` 表的 `p2` 与 `p3` 分区插入数据。

  ```unknow
  obclient> insert into tbl1_l2 values(8,'8'), (9,'9');
  Query OK, 2 rows affected (0.01 sec)
  Records: 2  Duplicates: 0  Warnings: 0

  ```

  查看数据落入的 `p2` 与 `p3` 分区。

  ```unknow
  obclient> SELECT * FROM tbl1_l2 partition(p2,p3);
  +------+------+
  | col1 | col2 |
  +------+------+
  |    8 | 8    |
  |    9 | 9    |
  +------+------+
  2 rows in set

  ```

## 删除一级分区

### 语法

```sql
ALTER TABLE table_name DROP PARTITION partition_name_list;

partition_name_list:
  partition_name [, partition_name ...]

```

> **说明**
>
>  
>
> - 删除一级分区时，可以删除一个或多个分区，但不能删除全部分区。
>  - 删除一级分区时，请尽量避免该分区上存在活动的事务或查询，否则可能会导致 SQL 语句报错，或者出现一些异常情况。
>  - 删除分区时，会同时删除分区中的数据，如果只需要删除数据，则可以使用 `TRUNCATE` 语句。

### 示例

删除一级分区表 `tbl1_r` 中的 `M197105` 和 `M197106`。

1. 查看 `tbl1_r` 分区表。

   ```unknow
   obclient> show create table tbl1_r\G
   *************************** 1. row ***************************
          Table: tbl1_r
   Create Table: CREATE TABLE `tbl1_r` (
     `id` int(11) NOT NULL,
     `value` varchar(50) DEFAULT NULL,
     `time` timestamp NOT NULL
   ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
    partition by range(UNIX_TIMESTAMP(time))
   (partition M197101 values less than (1612108800),
   partition M197102 values less than (1614528000),
   partition M197103 values less than (1617206400),
   partition M197104 values less than (1619798400),
   partition M197105 values less than (1622476800),
   partition M197106 values less than (1625068800))
   1 row in set

   ```
 2. 删除一级分区表 `tbl1_r` 中的 `M197105` 和 `M197106`。

   ```unknow
   obclient> ALTER TABLE tbl1_r DROP PARTITION M197105,M197106;
   Query OK, 0 rows affected

   ```
 3. 查看运行结果。

   ```unknow
   obclient>show create table tbl1_r\G
   *************************** 1. row ***************************
          Table: tbl1_r
   Create Table: CREATE TABLE `tbl1_r` (
     `id` int(11) NOT NULL,
     `value` varchar(50) DEFAULT NULL,
     `time` timestamp NOT NULL
   ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
    partition by range(UNIX_TIMESTAMP(time))
   (partition M197101 values less than (1612108800),
   partition M197102 values less than (1614528000),
   partition M197103 values less than (1617206400),
   partition M197104 values less than (1619798400))
   1 row in set
   Query OK, 0 rows affected

   ```

## Truncate 一级分区

### 语法

```sql
ALTER TABLE table_name TRUNCATE PARTITION partition_name_list;

```

> **说明**
>
>  
>
> - Truncate 一级分区时，可以将一个或多个分区中的数据清空。
>  - 在 Truncate 一级分区时，请尽量避免该分区上存在活动的事务或查询，否则可能会导致 SQL 语句报错，或者出现一些异常情况。

### 示例

清除一级分区表 `tbl1_r` 中 `M197101` 和 `M197102` 分区的数据。

1. 查询一级分区表 `tbl1_r` 中 `M197101` 和 `M197102` 分区的数据。

   ```unknow
   obclient>  select * from tbl1_r partition(M197101,M197102);
   +----+--------+---------------------+
   | id | value  | time                |
   +----+--------+---------------------+
   |  1 | 张三   | 0000-00-00 00:00:00 |
   |  2 | 李四   | 0000-00-00 00:00:00 |
   +----+--------+---------------------+
   2 rows in set

   ```
 2. 清除一级分区表 `tbl1_r` 中 `M197101` 和 `M197102` 分区的数据。

   ```unknow
   obclient> ALTER TABLE tbl1_r TRUNCATE PARTITION M197101,M197102;
   Query OK, 0 rows affected

   ```unknow
   obclient>  select * from tbl1_r partition(M197101,M197102);
   Empty set

   ```

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