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