MySQL 8.0 参考手册  / 第24章分区  /  22.3 分区管理

22.3 分区管理

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

笔记

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

要更改表的分区方案,只需使用 ALTER TABLEpartition_options子句的语句即可。CREATE TABLE此子句的语法与用于创建分区表 的语法相同 ,并且始终以关键字开头PARTITION BY。假设您有一个使用以下 CREATE 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)
    );

id要重新分区此表,以便使用列值作为键的基础,将其 按键分成两个分区,您可以使用以下语句:

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

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

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

重要的

在给定的语句中只能使用单个PARTITION BY, ADD PARTITION, DROP PARTITION, REORGANIZE PARTITIONCOALESCE PARTITION子句 ALTER TABLE。如果您(例如)希望删除分区并重新组织表的剩余分区,则必须在两个单独的 ALTER TABLE语句中执行此操作(一个使用DROP PARTITION,然后第二个使用 REORGANIZE PARTITION)。

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