### 24.3.2 管理 HASH 和 KEY 分区

[](<>)[](<>)[](<>)[](<>)

通过散列或键分区的表在分区设置中进行更改方面非常相似，并且两者在许多方面都与按范围或列表分区的表不同。出于这个原因，本节只讨论对按散列或键分区的表的修改。有关添加和删除按范围或列表分区的表的分区的讨论，请参阅[第 24.3.1 节，“RANGE 和 LIST 分区的管理”](partitioning-management-range-list.html).

您不能从按以下方式分区的表中删除分区`哈希`要么`钥匙`就像你可以从被分区的表中一样`范围`要么`列表`.但是，您可以合并`哈希`要么`钥匙`分区使用`ALTER TABLE ... 合并分区`.假设一个`客户`包含有关客户端数据的表分为 12 个分区，创建如下所示：

```
CREATE TABLE clients (
    id INT,
    fname VARCHAR(30),
    lname VARCHAR(30),
    signed DATE
)
PARTITION BY HASH( MONTH(signed) )
PARTITIONS 12;
```

要将分区数从 12 个减少到 8 个，请执行以下命令[`更改表`](alter-table-partition-operations.html)陈述：

```
mysql> ALTER TABLE clients COALESCE PARTITION 4;
Query OK, 0 rows affected (0.02 sec)
```

`合并`与分区的表同样适用`哈希`,`钥匙`,`线性哈希`， 要么`线性键`.这是一个与上一个类似的示例，不同之处仅在于表的分区方式为`线性键`：

```
mysql> 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
```

后面的号码`合并分区`是要合并到剩余部分的分区数——换句话说，它是要从表中删除的分区数。

尝试删除比表中更多的分区会导致如下错误：

```
mysql> ALTER TABLE clients COALESCE PARTITION 18;
ERROR 1478 (HY000): Cannot remove all partitions, use DROP TABLE instead
```

增加分区数`客户`从 12 到 18 的表，使用`ALTER TABLE ... 添加分区`如此处所示：

```
ALTER TABLE clients ADD PARTITION PARTITIONS 6;
```
