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