• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 位置: MySQL 8 中文手册 -> MySQL 分区

    分区管理

    使用SQL语句修改分区表的方法有多种。使用该ALTER TABLE语句的分区扩展可以添加,删除,重新定义,合并或拆分现有分区。还有一些方法可以获取有关分区表和分区的信息。我们将在以下各节中讨论这些主题。

    • 有关由RANGE或分区的表中分区管理的信息LIST,请参见“管理RANGE和LIST分区”。
    • 有关管理HASHKEY分区的讨论,请参见“管理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 BYADD PARTITIONDROP PARTITIONREORGANIZE PARTITION,或COALESCE PARTITION子句可以在给定的使用ALTER TABLE说明。例如,如果您希望删除一个分区并重组表的剩余分区,则必须在两个单独的ALTER TABLE语句中进行操作(一个使用DROP PARTITION,然后另一个使用REORGANIZE PARTITION)。

    您可以使用删除一个或多个选定分区中的所有行ALTER TABLE ... TRUNCATE PARTITION