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

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 从一个或多个选定分区中删除所有行。