mysql怎么删除分区

文 / @WordPress主题

MySQL是一种广泛使用的关系型数据库管理系统,支持分区表的创建。分区表的数据被拆分成多个段,每个段都是一个独立的存储单元,可以方便地进行数据管理,提高查询性能。但有时候我们也需要删除一个已经存在的分区,下面就介绍一下MySQL怎么删除分区。

删除分区语法为:

ALTER TABLE '表名' DROP PARTITION '分区名'

清理分区数据为空,保留分区不删除,仅仅是清理数据,命令如下:

ALTER TABLE '表名' TRUNCATE PARTITION '分区名'

在windows10系统、MySQL8.0.22版本、DellG3电脑环境下,登录MySQL执行下面的命令可以删除特定分区:

ALTER TABLE bm_scenes_data_reminder DROP PARTITION p20210104;

如果需要把删除的分区重新加回去,需要按照以下步骤操作:

1. 先尝试直接执行增加分区命令:

ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE=InnoDB);

但会出现错误提示:“MAXVALUEcanonlybeusedinlastpartitiondefinition”,即必须是在最后一个分区的后面才可以这样增加。因此如果一定要加回p20210104这个分区,只能先将p20210104后面的分区删除,再增加p20210104分区,再把p20210104后面的分区重新加回去。

2. 先删除p20210104分区后面的所有分区:

ALTER TABLE bm_scenes_data_reminder DROP PARTITION p20210105;
ALTER TABLE bm_scenes_data_reminder DROP PARTITION p20210106;
ALTER TABLE bm_scenes_data_reminder DROP PARTITION p20210107;
ALTER TABLE bm_scenes_data_reminder DROP PARTITION p20210108;
ALTER TABLE bm_scenes_data_reminder DROP PARTITION p20210109;
ALTER TABLE bm_scenes_data_reminder DROP PARTITION p20210110;
ALTER TABLE bm_scenes_data_reminder DROP PARTITION future;

3. 增加p20210104分区:

ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE=InnoDB);

4. 把p20210104分区后面的所有分区重新加回去:

ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210105 VALUES LESS THAN (738160) ENGINE=InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210106 VALUES LESS THAN (738161) ENGINE=InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210107 VALUES LESS THAN (738162) ENGINE=InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210108 VALUES LESS THAN (738163) ENGINE=InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210109 VALUES LESS THAN (738164) ENGINE=InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210110 VALUES LESS THAN (738165) ENGINE=InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION future VALUES LESS THAN MAXVALUE ENGINE=InnoDB);

这种操作方式会把p20210104分区后面的所有分区数据清除,需要慎重在正式线上环境中操作。

除了删除分区,MySQL还支持动态地增加分区。例如,在一个系统表sys_log中,我们可以实现每天删除90天前的分区并同时建一个4天后的分区(即每天将4天后的分区创建表):

1. 首先,将sys_log表修改成分区表:

ALTER TABLE `sys_log` DROP PRIMARY KEY, ADD PRIMARY KEY (`id`, `begin_time`);
ALTER TABLE sys_log PARTITION BY RANGE (to_days(begin_time)) (
PARTITION p20210816 VALUES LESS THAN (738383),
PARTITION future VALUES LESS THAN MAXVALUE
);

2. 每天执行以下的分区操作,增加一天的分区:

ALTER TABLE sys_log DROP PARTITION future;
ALTER TABLE sys_log ADD PARTITION (PARTITION p20210817 VALUES LESS THAN (738384) ENGINE=InnoDB);
ALTER TABLE sys_log ADD PARTITION (PARTITION p20210818 VALUES LESS THAN (738385) ENGINE=InnoDB);
ALTER TABLE sys_log ADD PARTITION (PARTITION p20210819 VALUES LESS THAN (738386) ENGINE=InnoDB);
ALTER TABLE sys_log ADD PARTITION (PARTITION future VALUES LESS THAN MAXVALUE ENGINE=InnoDB);

3. 定时任务配置,每天执行一次分区的清理与创建。

以上就是MySQL如何删除分区的详细介绍,希望对大家有所帮助。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。