14

我有一個表,如:如何在不丟失數據的情況下刪除分區?

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

不完全一樣,但上面類似的....

現在假設我的表有20萬行,現在我想刪除表中的分區和根據需要重新組織它們,而不需要MAX VALUE。

任何人都可以幫助我重新排列分區而不丟棄數據或丟棄表並重新創建它嗎?

回答

7

可以使用ALTER TABLE .. REORGANIZE PARTITION命令重組分區p0

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

如果你打算改變一個表的分區,而不會丟失數據,使用ALTER TABLE ...重組​​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 
); 

看一看RANGE partitioning in MySQL

如果你的分區p2變得過大,你可以把它分解以同樣的方式。

60
ALTER TABLE tbl REMOVE PARTITIONING; 
+0

這是正確的答案,請注意這一點。 –

+0

這應該是問題的正確答案。 – Sugan

1

重新排列分區不需要刪除所有現有分區。您可以直接在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); 

P.S.經測試MySQL 5.7.11

相關問題