MySQL 8.4 Reference Manual  /  Partitioning  /  Partition Management

26.3 分区管理

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

Note

所有一个分区表的分区必须具有相同数量的子分区;一旦表被创建,就不能改变子分区结构。

要更改表的分区方案,只需使用带有 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 语句”

Important

在一个给定的ALTER TABLE语句中,只能使用一个PARTITION BYADD PARTITIONDROP PARTITIONREORGANIZE PARTITIONCOALESCE PARTITION子句。如果你(例如)想要删除一个分区并重新组织表的剩余分区,你必须这样做:在两个单独的ALTER TABLE语句中执行(一个使用DROP PARTITION,然后另一个使用REORGANIZE PARTITION)。

你可以通过ALTER TABLE ... TRUNCATE PARTITION来删除一个或多个选定分区中的所有行。