使用 SQL 语句可以修改分区表;可以使用分区扩展的 ALTER TABLE
语句来添加、删除、重新定义、合并或拆分现有的分区。此外,还可以获取关于分区表和分区的信息。在以下部分中,我们将讨论这些主题。
-
有关按
RANGE
或LIST
分区的表的分区管理信息,请参阅 第 26.3.1 节,“RANGE 和 LIST 分区管理”。 -
有关管理
HASH
和KEY
分区的信息,请参阅 第 26.3.2 节,“HASH 和 KEY 分区管理”。 -
有关获取分区信息的机制,请参阅 第 26.3.5 节,“获取分区信息”,其中讨论了 MySQL 8.3 中提供的获取分区表和分区信息的机制。
-
有关执行分区维护操作的信息,请参阅 第 26.3.4 节,“分区维护”。
所有分区表的子分区数必须相同;创建表后无法更改子分区。
要更改表的分区方案,只需使用 ALTER TABLE
语句带有 partition_options
选项,该选项的语法与用于创建分区表的 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
从一个或多个选定的分区中删除所有行。