mysql怎么删除分区
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如何删除分区的详细介绍,希望对大家有所帮助。

-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
mysql connector 怎么安装 2023-05-14 07:00:02
-
mysql怎样查询日期范围 2023-05-14 07:00:02
-
介绍MySQL和JDBC的事务控制(TCL) 2023-05-14 07:00:02