繁体   English   中英

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

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

我有一张像这样的桌子:

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);

不完全像上面,但类似......

现在假设我的表有 200000 行,现在我想删除表上的分区并根据没有 MAX VALUE 的要求重新组织它们。

任何人都可以帮助我重新排列分区而不删除数据或删除表并重新创建它吗?

ALTER TABLE tbl REMOVE PARTITIONING;

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

您可以使用ALTER TABLE .. REORGANIZE PARTITION命令重新组织分区p0

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

如果您打算在不丢失数据的情况下更改表的分区,请使用 ALTER TABLE ... REORGANIZE PARTITION

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

请注意,在您实际创建多个分区之前,这将没有意义,例如

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
);

看看MySQL 中的 RANGE 分区

如果你的分区p2变得太大,你可以用同样的方法分割它。

重新排列分区不需要删除所有现有分区。 您可以直接在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 用 MySQL 5.7.11 测试

如果要在保留分区的同时重新排列数据,
你可以看看 ALTER TABLE 的 REORGANIZE PARTITION 和 COALESCE PARTITION 子句
命令。
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