mysql怎么刪除分區

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分區,再后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視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享