可以使用多种 SQL 语句来修改分区表;可以使用 ALTER TABLE 语句的分区扩展来添加、删除、重新定义、合并或拆分现有分区。 还可以通过多种方式获取有关分区表和分区的信息。 我们将在以下部分讨论这些主题。
有关按
RANGE或LIST分区的表中的分区管理的信息,请参阅 第 26.3.1 节,“RANGE 和 LIST 分区的管理”。有关管理
HASH和KEY分区的讨论,请参阅 第 26.3.2 节,“HASH 和 KEY 分区的管理”。有关 MySQL 9.0 中提供的用于获取有关分区表和分区的信息的机制的讨论,请参阅 第 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 从一个或多个选定分区中删除所有行。