按散列或键分区的表在分区设置更改方面彼此非常相似,并且两者在许多方面与按范围或列表分区的表不同。出于这个原因,本节将讨论修改按散列或仅按键分区的表。有关添加和删除按范围或列表分区的表的分区的讨论,请参阅 第 24.3.1 节,“RANGE 和 LIST 分区的管理”。
您不能从按 或 分区的表中删除分区的方式与从按
或HASH
分区的表中删除分区KEY
的方式相同
。但是,您可以使用合并或
分区。假设
包含有关客户的数据的表分为 12 个分区,创建如下所示:
RANGE
LIST
HASH
KEY
ALTER TABLE ... COALESCE
PARTITION
clients
Press CTRL+C to copyCREATE TABLE clients ( id INT, fname VARCHAR(30), lname VARCHAR(30), signed DATE ) PARTITION BY HASH( MONTH(signed) ) PARTITIONS 12;
要将分区数从 12 个减少到 8 个,请执行以下
ALTER
TABLE
语句:
Press CTRL+C to copymysql> ALTER TABLE clients COALESCE PARTITION 4; Query OK, 0 rows affected (0.02 sec)
COALESCE
适用于按HASH
、
KEY
、LINEAR HASH
或
分区的表LINEAR KEY
。这是一个与上一个类似的示例,不同之处仅在于该表按以下方式分区
LINEAR KEY
:
Press CTRL+C to copymysql> CREATE TABLE clients_lk ( -> id INT, -> fname VARCHAR(30), -> lname VARCHAR(30), -> signed DATE -> ) -> PARTITION BY LINEAR KEY(signed) -> PARTITIONS 12; Query OK, 0 rows affected (0.03 sec) mysql> ALTER TABLE clients_lk COALESCE PARTITION 4; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0
后面COALESCE PARTITION
的数字是要合并到剩余部分的分区数——换句话说,它是要从表中删除的分区数。
尝试删除比表中更多的分区会导致如下错误:
Press CTRL+C to copymysql> ALTER TABLE clients COALESCE PARTITION 18; ERROR 1478 (HY000): Cannot remove all partitions, use DROP TABLE instead
要将
clients
表的分区数从 12 增加到 18,请
ALTER TABLE ... ADD PARTITION
按此处所示使用:
Press CTRL+C to copyALTER TABLE clients ADD PARTITION PARTITIONS 6;