[TOC] # 二级分区表 ## 添加一级分区 主要有以下两种场景: * 模板化二级分区表 对于模板化⼆级分区表,添加⼀级分区时只需要指定⼀级分区的定义即可,⼆级分区的定义会⾃动按照模板填充。 语法如下: ~~~ ALTER TABLE table_name add partition part_name partition_define ~~~ 示例如下: ~~~ obclient> ALTER TABLE t_range_range add partition p3 VALUES less than (400); ~~~ * 非模板化二级分区表 对于⾮模板化⼆级分区表,添加⼀级分区时,需要同时指定⼀级分区的定义和该⼀级分区下的⼆级分区定义。 语法如下: ~~~ ALTER TABLE table_name add partition part_name partition_define ( subpartition subpart_name subpartition_define , ... ) ~~~ 示例如下: ~~~ obclient> ALTER TABLE t_range_range1 add partition p4 VALUES less than (500) ( subpartition p4_r1 VALUES less than (100), subpartition p4_r2 VALUES less than (200), subpartition p5_r3 VALUES less than (300) ); ~~~ ## 删除一级分区 OceanBase 数据库支持删除 Range/List 类型的二级分区表中的一级分区,将一个或多个分区从表中移除。删除一级分区同时会删除该一级分区的定义和其对应的二级分区中的数据。 MySQL 模式下,删除一级分区的语法如下: ~~~ obclient> ALTER TABLE table_name DROP PARTITION p1; obclient> ALTER TABLE table_name DROP PARTITION p1,p2; ~~~ ## 删除二级分区 OceanBase 数据库支持删除⾮模板化⼆级分区表及 Range/List 类型的二级分区表的⼆级分区,将一个或多个分区从表中移除。删除二级分区同时会删除该分区的定义和其中的数据。 MySQL 模式下,删除二级分区的语法如下: ~~~ obclient> ALTER TABLE table_name DROP SUBPARTITION p1; obclient> ALTER TABLE table_name DROP SUBPARTITION p1,p2; ~~~ ## Truncate 一级分区 OceanBase 数据库当前支持对 Range/List 类型的二级分区表中的一级分区执行 Truncate 操作,将一个或多个一级分区中对应的二级分区的数据全部移除。 MySQL 模式下,Truncate 一级分区的语法如下: ~~~ obclient> ALTER TABLE table_name DROP PARTITION p1; obclient> ALTER TABLE table_name DROP PARTITION p1,p2; ~~~ ## Truncate 二级分区 OceanBase 数据库支持对 Range/List 类型的二级分区表的⼆级分区执行 Truncate 操作,将一个或多个分区中的数据全部移除。 MySQL 模式下,删除二级分区的语法如下: ~~~ obclient> ALTER TABLE table_name DROP SUBPARTITION p1; obclient> ALTER TABLE table_name DROP SUBPARTITION p1,p2; ~~~