22.3 分区 Management

MySQL 5.7 提供了多种修改分区 table 的方法。可以添加,删除,重新定义,合并或拆分现有分区。所有这些动作都可以使用ALTER TABLE语句的分区扩展来执行。还有一些方法可以获取有关分区 table 和分区的信息。我们将在以下各节中讨论这些主题。

Note

在 MySQL 5.7 中,分区 table 的所有分区必须具有相同数量的子分区,并且一旦创建了 table,就无法更改子分区。

要更改 table 的分区方案,只需要使用带有* partition_options *子句的ALTER TABLE语句。此子句的语法与用于创建分区 table 的CREATE TABLE相同,并且始终以关键字PARTITION BY开头。假设您具有使用以下CREATE TABLE语句按范围划分的 table:

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)
    );

要对该 table 重新分区,以便使用id列值作为键的基础,通过键将其分为两个分区,可以使用以下语句:

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

这对 table 的结构具有与删除 table 并使用CREATE TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;重新创建 table 相同的作用。

ALTER TABLE ... ENGINE = ...仅更改 table 使用的存储引擎,并保留 table 的分区方案不变。使用ALTER TABLE ... REMOVE PARTITIONING删除 table 的分区。参见第 13.1.8 节“ ALTER TABLE 语句”

Important

在给定的ALTER TABLE语句中,只能使用单个PARTITION BYADD PARTITIONDROP PARTITIONREORGANIZE PARTITIONCOALESCE PARTITION子句。如果(例如)希望删除分区并重组 table 的其余分区,则必须在两个单独的ALTER TABLE语句中进行(一个使用DROP PARTITION,然后使用REORGANIZE PARTITION)。

在 MySQL 5.7 中,可以使用ALTER TABLE ...截断分区删除一个或多个选定分区中的所有行。