簡體   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