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