ADD PARTITION

本文档介绍了将分区和子分区添加到现有分区表中的方法。

语法

ALTER TABLE…ADD PARTITION命令用于将分区和子分区添加到现有的分区表中。

ALTER TABLE table_name ADD PARTITION partition_definition;

partition_definition为:

{list_partition | range_partition | hash_partition | key_partition}

其中list_partition为:

PARTITION [partition_name]
VALUES IN (value[, value]...)
[TABLESPACE tablespace_name]、
(subpartition, ...)

range_partition为:

PARTITION partition_name
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]
[(subpartition, ...)]

hash_partition/key_partition为:

PARTITION partition_name
[TABLESPACE tablespace_name]
(subpartition, ...)

其中subpartition为:

{list_subpartition | range_subpartition | hash_partition | key_partition}

list_subpartition 为:

SUBPARTITION [subpartition_name]
VALUES IN (value[, value]...)
[TABLESPACE tablespace_name]

range_subpartition为:

SUBPARTITION [subpartition_name ]
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]

hash_partition/key_subpartition为:

SUBPARTITION [subpartition_name ]
[TABLESPACE tablespace_name]

参数

参数

参数说明

table_name

要创建的表名称(可以采用模式限定的方式引用)。

partition_name

要创建的分区名称。分区名称在所有分区和子分区中必须是唯一的,且必须遵循给对象标识符命名的惯例。

subpartition_name

要创建的子分区名称。子分区名称在所有分区和子分区中必须是唯一的,且必须遵循给对象标识符命名的惯例。

(value[, value]...)

使用value来指定一个引用的文本值(或以逗号分隔的文本值列表)将表项目划分为不同的分区。每个分区规则必须至少指定一个值,但在规则中对于指定的值的数量没有上限要求。Value可能为nulldefault(如果指定了一个list分区的话)或maxvalue(如果指定了一个range分区的话)。

tablespace_name

分区或子分区所属的表空间名称。

描述

ALTER TABLE…ADD PARTITION命令用于添加分区和子分区到现有的分区中,且这个分区必须已经进行了子分区的划分。新的分区和子分区必须与现有分区和子分区的类型相同。新分区规则必须引用和定义现有分区的分区规则中指定的相同列。

如果您没有指定表空间(包括TABLESPACE子句指定新的子分区所属的表空间),那么子分区将创建于默认表空间。

如果对表进行了索引设置,那么索引将创建在新的子分区上。

示例

说明

RANGE分区必须以升序的方式指定。不能将新分区添加在RANGE分区表中现有的分区之前。

  • 添加分区到sales_range_range分区表:

    1. 假设数据库中存在sales_range_range分区表,建表语句如下:

      CREATE TABLE sales_range_range
      (
        dept_no     INT,
        part_no     INT,
        country     varchar(20),
        date        DATE,
        amount      INT
      )
      PARTITION BY RANGE(dept_no)
      SUBPARTITION BY RANGE(part_no)
      (
        PARTITION p0 VALUES LESS THAN (1000) (
          SUBPARTITION s0 VALUES LESS THAN(100),
          SUBPARTITION s1 VALUES LESS THAN(200),
          SUBPARTITION s2 VALUES LESS THAN(300),
          SUBPARTITION s3 VALUES LESS THAN(MAXVALUE)
        )
      );
    2. 使用ALTER TABLE…ADD PARTITION命令添加分区和子分区到sales_range_range分区表。

      ALTER TABLE sales_range_range ADD PARTITION (
          PARTITION p_2015 VALUES less than (2016)
          (
          SUBPARTITION q1_2015 VALUES LESS THAN(4),
          SUBPARTITION q2_2015 VALUES LESS THAN(7),
          SUBPARTITION q3_2015 VALUES LESS THAN(10),
          SUBPARTITION q4_2015 VALUES LESS THAN(13)
        )
      );
  • 添加分区到sales_list_range分区表:

    1. 假设数据库中存在sales_list_range分区表,建表语句如下:

      CREATE TABLE sales_list_range
      (
        dept_no     INT,
        part_no     INT,
        country     varchar(20),
        date        DATE,
        amount      INT
      )
      PARTITION BY LIST (dept_no)
      SUBPARTITION BY RANGE(amount)
      (
        PARTITION p0 VALUES in (1, 2)(
          SUBPARTITION s0 VALUES LESS THAN(1000),
          SUBPARTITION s1 VALUES LESS THAN(2000),
          SUBPARTITION s2 VALUES LESS THAN(3000),
          SUBPARTITION s3 VALUES LESS THAN(MAXVALUE)
        )
      );
    2. 使用ALTER TABLE…ADD PARTITION命令添加分区和子分区到sales_list_range分区表。

      ALTER TABLE sales_list_range ADD PARTITION (
         PARTITION p3 VALUES in (7, 8)(
          SUBPARTITION q1_2015 VALUES LESS THAN(4),
          SUBPARTITION q2_2015 VALUES LESS THAN(7),
          SUBPARTITION q3_2015 VALUES LESS THAN(10),
          SUBPARTITION q4_2015 VALUES LESS THAN(13)
        )
      );
  • 添加分区到sales_hash_hash分区表:

    1. 假设数据库中存在sales_hash_hash分区表,建表语句如下:

      CREATE TABLE sales_hash_hash
      (
        dept_no     INT,
        part_no     INT,
        country     varchar(20),
        date        DATE,
        amount      INT
      )
         PARTITION BY HASH(dept_no) PARTITIONS 9
         SUBPARTITION BY HASH(part_no) SUBPARTITIONS 3
      ;
    2. 使用ALTER TABLE…ADD PARTITION命令添加分区和子分区到sales_hash_hash分区表。

      ALTER TABLE sales_hash_hash ADD PARTITION (
         PARTITION m3(
          SUBPARTITION d6,
          SUBPARTITION d7,
          SUBPARTITION d8
        )
      );
  • 添加分区到sales_key_key分区表:

    1. 假设数据库中存在sales_key_key分区表,建表语句如下:

      CREATE TABLE sales_key_key
      (
        dept_no     varchar(20),
        part_no     varchar(20),
        country     varchar(20),
        date        DATE,
        amount      INT
      )
         PARTITION BY KEY(dept_no) PARTITIONS 3
         SUBPARTITION BY KEY(part_no) SUBPARTITIONS 2;
    2. 使用ALTER TABLE…ADD PARTITION命令添加分区和子分区到sales_key_key分区表。

      ALTER TABLE sales_key_key ADD PARTITION (
         PARTITION m3(
          SUBPARTITION d6,
          SUBPARTITION d7
        )
      );