[英]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;
您可以使用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
);
如果你的分區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.