## 24.3 分区管理

[24.3.1 RANGE 和 LIST 分区的管理](partitioning-management-range-list.html)
[24.3.2 HASH 和 KEY 分区的管理](partitioning-management-hash-key.html)
[24.3.3 用表交换分区和子分区](partitioning-management-exchange.html)
[24.3.4 分区维护](partitioning-maintenance.html)
[24.3.5 获取分区信息](partitioning-info.html)

[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)

使用 SQL 语句修改分区表的方法有很多种；可以使用分区扩展来添加、删除、重新定义、合并或拆分现有分区[`更改表`](alter-table-partition-operations.html)陈述。还有一些方法可以获取有关分区表和分区的信息。我们将在以下部分讨论这些主题。

-   有关按以下方式分区的表中的分区管理的信息`范围`要么`列表`， 看[第 24.3.1 节，“RANGE 和 LIST 分区的管理”](partitioning-management-range-list.html).

-   关于管理的讨论`哈希`和`钥匙`分区，见[第 24.3.2 节，“HASH 和 KEY 分区的管理”](partitioning-management-hash-key.html).

-   看[第 24.3.5 节，“获取有关分区的信息”](partitioning-info.html)，讨论 MySQL 8.0 中提供的用于获取有关分区表和分区的信息的机制。

-   有关对分区执行维护操作的讨论，请参阅[第 24.3.4 节，“分区维护”](partitioning-maintenance.html).

笔记

分区表的所有分区必须具有相同数量的子分区；一旦创建表，就不可能更改子分区。

要更改表的分区方案，只需使用[`更改表`](alter-table-partition-operations.html)声明与*`分区选项`*选项，其语法与使用的相同[`创建表`](create-table.html)用于创建分区表；此选项（也）始终以关键字开头`分区方式`.假设以下[`创建表`](create-table.html)语句用于创建按范围分区的表：

```
CREATE TABLE trb3 (id INT, name VARCHAR(50), purchased DATE)
    PARTITION BY RANGE( YEAR(purchased) ) (
        PARTITION p0 VALUES LESS THAN (1990),
        PARTITION p1 VALUES LESS THAN (1995),
        PARTITION p2 VALUES LESS THAN (2000),
        PARTITION p3 VALUES LESS THAN (2005)
    );
```

要重新分区此表，以便使用键将其分区为两个分区`id`列值作为键的基础，可以使用这样的语句：

```
ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;
```

这对表结构的影响与删除表并使用重新创建它的效果相同`CREATE TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;`.

`更改表 ... 引擎 = ...`仅更改表使用的存储引擎，并保持表的分区方案不变。仅当目标存储引擎提供分区支持时，该语句才会成功。您可以使用`ALTER TABLE ... 删除分区`删除表的分区；看[第 13.1.9 节，“ALTER TABLE 语句”](alter-table.html).

重要的

只有一个`分区方式`,`添加分区`,`删除分区`,`重组分区`， 要么`合并分区`子句可以用于给定的[`更改表`](alter-table-partition-operations.html)陈述。如果您（例如）希望删除一个分区并重新组织一个表的剩余分区，您必须在两个单独的[`更改表`](alter-table-partition-operations.html)语句（一个使用`删除分区`然后第二个使用`重组分区`）。

您可以使用删除一个或多个选定分区中的所有行[`ALTER TABLE ...截断分区`](alter-table.html).
