首頁  >  文章  >  資料庫  >  mysql怎麼刪除分割區

mysql怎麼刪除分割區

WBOY
WBOY原創
2022-03-09 15:59:4513942瀏覽

在mysql中,可以利用alter語句來配合“DROP PARTITION”來刪除分區,“DROP PARTITION”的作用就是用於刪除指定的分區,語法為“ALTER TABLE '表名' DROP PARTITION '分區名' 」。

mysql怎麼刪除分割區

本教學操作環境: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 definition
mysql>

##1步驟中不可行,提示必須是在最後一個分割區的後面才可以這樣增加。

因此如果一定要加回p20210104這個分區(即需要在中間部分增加分區),只能將p20210104 後面的分區先全刪除,再增加p20210104分區,再後p20210104210104年分區重新加 。操作如下:

##先刪除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怎麼刪除分割區的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn