---
title: 编组
description: "创建一级分区表 本文将介绍如何创建一级分区表和相关注意事项。 创建 Range 分区表 语法 CREATE TABLE table_name (column_name column_type[, column_name column_type]) PARTITION BY RANGE (column_name[, c…"
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.2.3 企业版 LTS

# 创建一级分区表

更新时间：2023-11-21 16:51:25

本文将介绍如何创建一级分区表和相关注意事项。

## 创建 Range 分区表

### 语法

```sql
CREATE TABLE table_name (column_name column_type[, column_name column_type])
  PARTITION BY RANGE (column_name[, column_name])
    (PARTITION partition_name VALUES LESS THAN(expr)
     [, PARTITION partition_name VALUES LESS THAN (expr )...]
     [, PARTITION partition_name VALUES LESS THAN (MAXVALUE)]
     );

```

> **说明**
>
>  
>
> 在创建 Range 分区时，需要遵循以下规则：
>
>  
>
> - 每个分区都有一个 `VALUES LESS THAN` 子句，它为分区指定一个非包含的上限值。分区键的任何值等于或大于这个值时将被映射到下一个分区中。
>  - 除第一个分区外，所有分区都隐含一个下限值，即上一个分区的上限值。
>  - 仅允许最后一个分区的上限定义为 `MAXVALUE`，这个值没有具体的数值，并且比其他所有分区的上限都要大，也包含空值。如果最后一个 Range 分区指定了 `MAXVALUE` ，则不能新增分区。

### 参数解释

| 参数 | 描述 |
| --- | --- |
| table_name | 指定表名。 |
| column_name | 指定列名称。 |
| column_type | 指定列的数据类型。 |
| partition_name | 指定一级分区名称。 |

### 示例

创建一个 Range 分区表 `tbl1_log_r`。

```sql
obclient> CREATE TABLE tbl1_log_r(log_id INT,log_date DATE NOT NULL DEFAULT SYSDATE)
       PARTITION BY RANGE(log_date)
        (PARTITION M202001 VALUES LESS THAN(TO_DATE('2020/02/01','YYYY/MM/DD'))
         , PARTITION M202002 VALUES LESS THAN(TO_DATE('2020/03/01','YYYY/MM/DD'))
         , PARTITION M202003 VALUES LESS THAN(TO_DATE('2020/04/01','YYYY/MM/DD'))
         , PARTITION M202004 VALUES LESS THAN(TO_DATE('2020/05/01','YYYY/MM/DD'))
         , PARTITION M202005 VALUES LESS THAN(TO_DATE('2020/06/01','YYYY/MM/DD'))
         , PARTITION M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD'))
         , PARTITION M202007 VALUES LESS THAN(TO_DATE('2020/08/01','YYYY/MM/DD'))
         , PARTITION M202008 VALUES LESS THAN(TO_DATE('2020/09/01','YYYY/MM/DD'))
         , PARTITION M202009 VALUES LESS THAN(TO_DATE('2020/10/01','YYYY/MM/DD'))
         , PARTITION M202010 VALUES LESS THAN(TO_DATE('2020/11/01','YYYY/MM/DD'))
         , PARTITION M202011 VALUES LESS THAN(TO_DATE('2020/12/01','YYYY/MM/DD'))
         , PARTITION M202012 VALUES LESS THAN(TO_DATE('2021/01/01','YYYY/MM/DD'))
         , PARTITION MMAX VALUES LESS THAN (MAXVALUE)
         );
Query OK, 0 rows affected

```

## 创建 List 分区表

### 语法

```sql
CREATE TABLE table_name (column_name column_type[,column_name column_type])
  PARTITION BY LIST (column_name[, column_name])
    (PARTITION partition_name VALUES ( v01 [, v0N])
     [,PARTITION partition_name VALUES ( vN1 [, vNN])]
     [,PARTITION partition_name VALUES (DEFAULT)]
    );

```

> **说明**
>
>  
>
> - List 分区的分区键不能是表达式。
>  - 如果在最后一个 List 分区指定了 `DEFAULT`，则不能新增分区。

### 参数解释

| 参数 | 描述 |
| --- | --- |
| table_name | 指定表名。 |
| column_name | 指定列名称。 |
| column_type | 指定列的数据类型。 |
| partition_name | 指定分区名称。 |
| DEFAULT | 存储不在指定 List 范围内的数据记录，仅允许最后一个分区指定这个值。 |

### 示例

创建一个 List 分区表 `tbl1_log_l`。

```sql
obclient> CREATE TABLE tbl1_log_l(log_id INT,log_value VARCHAR2(20))
       PARTITION BY LIST(log_value)
        (PARTITION P01 VALUES ('A'),
         PARTITION P02 VALUES ( 'B' ),
         PARTITION P03 VALUES ( 'C' )
        );
Query OK, 0 rows affected

```

## 创建 Hash 分区表

### 语法

```sql
CREATE TABLE table_name (column_name column_type[,column_name column_type])
PARTITION BY HASH(column_name[, column_name]) PARTITIONS partition_count;

```

### 参数解释

| 参数 | 描述 |
| --- | --- |
| table_name | 指定表名。 |
| column_name | 指定列名。 |
| column_type | 指定列的数据类型。 |
| partition_count | 指定 Hash 分区个数。 |

> **说明**
>
>  
>
> 对于 Hash 分区，创建时如果没有指定分区的名字，分区的命名由系统根据命名规则完成。对于一级分区表，则每个分区分别命名为 p0、p1、...、pn。

### 示例

创建一个 Hash 分区表 tbl1_h。

```sql
obclient> CREATE TABLE tbl1_h(col1 INT,col2 VARCHAR(50))
       PARTITION BY HASH(col1) PARTITIONS 60;
Query OK, 0 rows affected

```

## 后续操作

创建一级分区后，您可以对一级分区进行管理，例如：添加一级分区、删除一级分区、Truncate 一级分区等。分区管理的详细操作，请参见 [管理一级分区表](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357036)。

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