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

添加一级分区

  • Range/List 分区

    对于 Range 分区,只能在最大的分区之后添加一个分区,不可以在中间某个或者开始的地方添加。如果当前的分区中有 MAXVALUE 的分区,则不能继续添加分区。

    List 分区添加一级分区时,要求添加的分区不与之前的分区冲突即可。如果一个 List 分区有默认分区即 Default Partition,则不能添加任何分区。

    MySQL 模式和 Oracle 模式下,在 Range/List 分区中添加一级分区的语法格式如下:

    1. ALTER TABLE table_name
    2. ADD PARTITION
    3. (
    4. partition_defines
    5. )

    在 Range/List 分区中添加一级分区不会影响全局索引和局部索引的使用。

  • Hash/Key 分区

    对于 Hash/Key 分区,目前 OceanBase 数据库暂不支持添加一级分区。

删除一级分区

删除一级分区时,可以删除一个或多个分区,但不能删除全部分区。

  • Range/List 分区

    对于 Range/List 分区,删除分区时,同时会删除分区中的数据。

    MySQL 模式和 Oracle 模式下,删除一级分区的语法格式如下:

    1. obclient> ALTER TABLE table_name DROP PARTITION p1;
    2. obclient> ALTER TABLE table_name DROP PARTITION p1,p2;

    删除分区时,会同时删除分区中的数据,如果只需要删除数据,则可以使用 TRUNCATE 语句。

    此外,对于 Oracle 模式下有全局索引的一级分区表,删除一级分区时,需要通过在 ALTER TABLE 语句中添加 UPDATE GLOBAL INDEXES 关键字的方式来更新全局索引信息,示例如下。

    1. obclient> ALTER TABLE table_name DROP PARTITION p1
    2. UPDATE GLOBAL INDEXES;
    3. obclient> ALTER TABLE table_name DROP PARTITION p1,p2
    4. UPDATE GLOBAL INDEXES;

    注意

    对于 Oracle 模式下有全局索引的一级分区表,删除一级分区时,如果未添加 UPDATE GLOBAL INDEXES 关键字,则删除分区后,该分区表上的全局索引会处于不可用状态。

  • Hash/Key 分区

    对于 Hash/Key 分区,目前 OceanBase 数据库暂不支持删除一级分区。

Truncate 一级分区

OceanBase 数据库支持对一级分区表中的 Range/List 分区执行 Truncate 操作,将一个或多个分区中的数据全部移除。

MySQL 模式和 Oracle 模式下,Truncate 一级分区的语法格式如下:

  1. obclient> ALTER TABLE table_name TRUNCATE PARTITION p1;
  2. obclient> ALTER TABLE table_name TRUNCATE PARTITION p1,p2;

此外,对于 Oracle 模式下有全局索引的一级分区表,Truncate 分区时,需要通过在 ALTER TABLE 语句中添加 UPDATE GLOBAL INDEXES 关键字的方式来更新全局索引信息,示例如下。

  1. obclient> ALTER TABLE table_name TRUNCATE PARTITION p1 UPDATE GLOBAL INDEXES;
  2. obclient> ALTER TABLE table_name TRUNCATE PARTITION p1,p2 UPDATE GLOBAL INDEXES;

注意

对于 Oracle 模式下有全局索引的一级分区表,Truncate 分区时,如果未添加 UPDATE GLOBAL INDEXES 关键字,则 Truncate 分区后,该分区表上的全局索引会处于不可用状态。