MySQL 8.4 参考手册  /  分区  /  分区管理

26.3 分区管理

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

注意

分区表的所有分区必须具有相同数量的子分区; 创建表后,无法更改子分区。

要更改表的方案,只需使用带有 partition_options 选项的 ALTER TABLE 语句,该选项的语法与创建分区表时 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 删除表的分区; 请参见 第 15.1.9 节“ALTER TABLE 语句”

重要

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

您可以使用 ALTER TABLE ... TRUNCATE PARTITION 从一个或多个选定分区中删除所有行。