千家信息网

mysql如何删除分区

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍了mysql如何删除分区的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql如何删除分区文章都会有所收获,下面我们一起来看看吧。在mysql中,可以利
千家信息网最后更新 2026年10月31日mysql如何删除分区

这篇文章主要介绍了mysql如何删除分区的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql如何删除分区文章都会有所收获,下面我们一起来看看吧。

在mysql中,可以利用alter语句配合"DROP PARTITION"来删除分区,"DROP PARTITION"的作用就是用于删除指定的分区,语法为"ALTER TABLE '表名' DROP PARTITION '分区名' "。

本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。

mysql删除分区

删除分区语法为:ALTER TABLE '表名' DROP PARTITION '分区名'

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

alter table bm_scenes_data_reminder truncate partition p20210104;

删除分区

alter table bm_scenes_data_reminder drop partition p20210104;

删除后执行查看建表语句,可以看到p20210104分区没有了

增加分区

##如果希望将刚删除的p20210104分区重新加回去?怎么办。先尝试直接执行增加分区命令试试

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

结果如下,说明是不可行的。

mysql> ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);ERROR 1481 (HY000): MAXVALUE can only be used in last partition definitionmysql>

##1步骤中不可行,提示必须是在最后一个分区的后面才可以这样增加。

因此如果一定要加回p20210104这个分区(即需要在中间部分增加分区),只能将p20210104 后面的分区先全删除,再增加p20210104分区,再后p20210104 后面的分区重新加回去。操作如下:

##先删除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;

##增加p20210104分区

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

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

最后再查看一下ddl发现分区加回去了,但这种操作方式会把p20210104分区后面的所有分区数据删除,在正式线上环境中请慎

案例

系统有操作系统表sys_log,实现每天删除90天前的分区并同时建一个4天后的分区(即每天将4天后的分区创建表),步骤如下:

##新建普通表,只执行一次

CREATE TABLE `sys_log` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `begin_time` datetime DEFAULT NULL COMMENT '开始时间',  `end_time` datetime DEFAULT NULL COMMENT '结束时间',  `spend_mills` int(11) DEFAULT NULL COMMENT '运行时长,单位ms',  `username` varchar(100) DEFAULT NULL COMMENT '用户id',  `log_status` int(11) NOT NULL DEFAULT '0' COMMENT '运行状态,[0]成功[1]失败',  `code` int(11) NOT NULL DEFAULT '0' COMMENT '错误码',  `remote_addr` varchar(50) DEFAULT '' COMMENT '远程地址',  `request_uri` varchar(255) DEFAULT NULL COMMENT '请求路径',  `user_agent` text COMMENT '用户代理',  `req_data` text NOT NULL COMMENT '请求参数',  `resp_data` longtext NOT NULL COMMENT '返回结果',  PRIMARY KEY (`id`) USING BTREE,  KEY `idx_log_begintime` (`begin_time`) USING BTREE COMMENT '系统日志的beginTime字段索引') ENGINE=Innodb DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC

##修改成分区表,只执行一次,留一个当前时间的分区和将来的future分区

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

##每天执行以下的分区操作,进行增加一天的分区,如

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

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

30 4 * * * /bin/python /home/testuser/SyslogPartitionClear.py >/dev/null 2>&1

关于"mysql如何删除分区"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"mysql如何删除分区"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

系统 数据 时间 知识 内容 命令 天后 步骤 环境 用户 篇文章 结果 语句 语法 运行 普通 成功 操作系统 价值 任务 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网佳科技有限公司 互联网络科技有限公司 互联网科技公司发展 成都互联网科技公司 狮子座互联网科技有限公司 创业天下互联网科技有限公司 重庆威客帮互联网科技 南平创想时代互联网科技有限公司 未来五年的互联网科技 坤平互联网科技 互联网科技和信息 东莞新华互联网科技学校 洛阳共同富裕互联网科技有限公司 领航科技大厦互联网公司 互联网科技融合创新 九思连强互联网电子科技有限公司 互联网硬科技公司 福州德业互联网科技 陕西九四连强互联网科技有限公司 求路客互联网科技电话 互联网核心科技是什么 以房互联网科技 朗涯互联网科技 科技创新互联网企业 齐家互联网科技有限公司 人人互联网科技是培训 成都仁贤领冠互联网科技有限公司 上海创道互联网络科技有限公司 互联网科技企业商标注意事项 科技美学互联网 艺术
0