[TOC] # 一级分区表 ## 添加一级分区 * Range/List 分区 对于 Range 分区,只能在最大的分区之后添加一个分区,不可以在中间某个或者开始的地方添加。如果当前的分区中有`MAXVALUE`的分区,则不能继续添加分区。 List 分区添加一级分区时,要求添加的分区不与之前的分区冲突即可。如果一个 List 分区有默认分区即`Default Partition`,则不能添加任何分区。 MySQL 模式下,在 Range/List 分区中添加一级分区的语法格式如下: ~~~ ALTER TABLE table_name ADD PARTITION ( partition_defines ) ~~~ 在 Range/List 分区中添加一级分区不会影响全局索引和局部索引的使用。 * Hash/Key 分区 对于 Hash/Key 分区,目前 OceanBase 数据库暂不支持添加一级分区。 ## 删除一级分区 删除一级分区时,可以删除一个或多个分区,但不能删除全部分区。 * Range/List 分区 对于 Range/List 分区,删除分区时,同时会删除分区中的数据。 MySQL 模式下,删除一级分区的语法格式如下: ~~~ obclient> ALTER TABLE table_name DROP PARTITION p1; obclient> ALTER TABLE table_name DROP PARTITION p1,p2; ~~~ 删除分区时,会同时删除分区中的数据,如果只需要删除数据,则可以使用`TRUNCATE`语句。 * Hash/Key 分区 对于 Hash/Key 分区,目前 OceanBase 数据库暂不支持删除一级分区。 ## Truncate 一级分区 OceanBase 数据库支持对一级分区表中的 Range/List 分区执行 Truncate 操作,将一个或多个分区中的数据全部移除。 MySQL 模式下,Truncate 一级分区的语法格式如下: ~~~ obclient> ALTER TABLE table_name TRUNCATE PARTITION p1; obclient> ALTER TABLE table_name TRUNCATE PARTITION p1,p2; ~~~