可以使用多种方法使用 SQL 语句修改分区表;可以使用 ALTER TABLE
语句的分区扩展来添加、删除、重新定义、合并或拆分现有分区。 还可以使用一些方法来获取有关分区表和分区的信息。 我们将在以下部分中讨论这些主题。
有关按
RANGE
或LIST
分区的表中的分区管理的信息,请参见 第 26.3.1 节“RANGE 和 LIST 分区的管理”。有关管理
HASH
和KEY
分区的讨论,请参见 第 26.3.2 节“HASH 和 KEY 分区的管理”。有关 MySQL 8.4 中提供的用于获取有关分区表和分区的信息的机制的讨论,请参见 第 26.3.5 节“获取有关分区的信息”。
有关对分区执行维护操作的讨论,请参见 第 26.3.4 节“分区的维护”。
分区表的所有分区必须具有相同数量的子分区; 创建表后,无法更改子分区。
要更改表的方案,只需使用带有 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 BY
、ADD PARTITION
、DROP PARTITION
、REORGANIZE PARTITION
或 COALESCE PARTITION
子句。 例如,如果您希望删除一个分区并重新组织表的其余分区,则必须在两个单独的 ALTER TABLE
语句中执行此操作(一个使用 DROP PARTITION
,然后第二个使用 REORGANIZE PARTITION
)。
您可以使用 ALTER TABLE ... TRUNCATE PARTITION
从一个或多个选定分区中删除所有行。