Подтвердить что ты не робот

Как удалить раздел без вывода данных в 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.

Может ли кто-нибудь помочь мне изменить раздел, не отбрасывая данные или отбрасывая таблицу и воссоздавая ее?

4b9b3361

Ответ 1

ALTER TABLE tbl REMOVE PARTITIONING;

Ответ 2

Вы можете реорганизовать раздел p0 с помощью команды ALTER TABLE .. REORGANIZE PARTITION.

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

Посмотрите Разделение RANGE в MySQL

Если ваш раздел p2 становится слишком большим, вы можете разбить его таким же образом.

Ответ 3

Если вы хотите переупорядочить данные, сохраняя разделы,
вы можете взглянуть на разделы REORGANIZE PARTITION и COALESCE PARTITION ALTER TABLE
команда.
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

Ответ 4

Переупорядочить разделы не требуется удаление всех существующих разделов. Вы можете напрямую указать новое разделение в синтаксисе 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