简体   繁体   English

如何在不删除 MySQL 中的数据的情况下删除分区?

[英]how to drop partition without dropping data in MySQL?

I have a table like:我有一张像这样的桌子:

create table registrations( 
id int not null auto_increment primary key,
name varchar(50),
mobile_number varchar(13)) 
engine=innodb 
partition by range(id) (
partition p0 values less than (10000),
partition p0 values less than (20000),
partition p0 values less than max value);

Not exactly like above but similar to that....不完全像上面,但类似......

Now assume that my table has 200000 rows and now I want to remove partitions on the table and reorganize them in accordance to requirement without MAX VALUE in it.现在假设我的表有 200000 行,现在我想删除表上的分区并根据没有 MAX VALUE 的要求重新组织它们。

Can any one help me to rearrange partition without dropping data or dropping table and recreating it ?任何人都可以帮助我重新排列分区而不删除数据或删除表并重新创建它吗?

ALTER TABLE tbl REMOVE PARTITIONING;

来源: MySQL 参考手册中的 ALTER TABLE 语句

You can reorganize the partition p0 using the ALTER TABLE .. REORGANIZE PARTITION command.您可以使用ALTER TABLE .. REORGANIZE PARTITION命令重新组织分区p0

http://dev.mysql.com/doc/refman/5.5/en/partitioning-management-range-list.html http://dev.mysql.com/doc/refman/5.5/en/partitioning-management-range-list.html

If you intend to change the partitioning of a table without losing data, use ALTER TABLE ... REORGANIZE PARTITION如果您打算在不丢失数据的情况下更改表的分区,请使用 ALTER TABLE ... REORGANIZE PARTITION

ALTER TABLE registrations 
REORGANIZE PARTITION p0 INTO (
    PARTITION p0 VALUES LESS THAN (10000),
    PARTITION p0 VALUES LESS THAN (20000)
);

Note that this will not make sense until you actually create several partitions eg请注意,在您实际创建多个分区之前,这将没有意义,例如

ALTER TABLE registrations 
REORGANIZE PARTITION p0 INTO (
    PARTITION p0 VALUES LESS THAN (10000),
    PARTITION p1 VALUES LESS THAN (20000),
    PARTITION p2 VALUES LESS THAN MAXVALUE
);

Have a look at RANGE partitioning in MySQL看看MySQL 中的 RANGE 分区

If your partition p2 is becoming too large you can split it the same way.如果你的分区p2变得太大,你可以用同样的方法分割它。

Rearrange partitions doesn't require drop all existing partitions.重新排列分区不需要删除所有现有分区。 You can specified the new partitioning in the ALTER TABLE syntax directly, and no data will be lost.您可以直接在ALTER TABLE语法中指定新的分区,不会丢失任何数据。

ALTER TABLE registrations
PARTITION by RANGE(id) (
PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (20000),
PARTITION p3 VALUES LESS THAN (30000),
PARTITION p4 VALUES LESS THAN (40000),
PARTITION p5 VALUES LESS THAN (MAXVALUE);

PS Tested with MySQL 5.7.11 PS 用 MySQL 5.7.11 测试

If you want to rearrange the data while keeping the partitions,如果要在保留分区的同时重新排列数据,
you can take a look at REORGANIZE PARTITION and COALESCE PARTITION clauses of ALTER TABLE你可以看看 ALTER TABLE 的 REORGANIZE PARTITION 和 COALESCE PARTITION 子句
command.命令。
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM