Mysql自动按月分区

时间:2021-07-02 16:36:57   收藏:0   阅读:0

mysql创建分区时依赖字段需要设为主键 例 我的依赖字段为collect_time

需要先创建至少一个分区 例:创建第一个分区时间小于’2020-02-01’
ALTER TABLE tb_electric_power_info PARTITION BY RANGE (TO_DAYS(collect_time))
(partition p20200201 values less than (to_days(‘2020-02-01’))
)
创建存储过程自动分区
BEGIN
#Routine body goes here...

/* 到系统表查出这个表的最大分区,得到最大分区的日期。在创建分区的时候,名称就以日期格式存放,方便后面维护 */
SELECT REPLACE(partition_name,‘p‘,‘‘) INTO @P12_Name FROM INFORMATION_SCHEMA.PARTITIONS
WHERE table_name=‘tb_electric_power_info‘ ORDER BY partition_ordinal_position DESC LIMIT 1;
SET @Max_date= DATE(DATE_ADD(@P12_Name+0, INTERVAL 1 MONTH))+0;
/* 修改表,在最新分区的后面增加一个分区,时间范围加1月 */
SET @s1=CONCAT(‘ALTER TABLE tb_electric_power_info
ADD PARTITION (PARTITION p‘,@Max_date,‘ VALUES LESS THAN (to_days(‘‘‘,DATE(@Max_date),‘‘‘)))‘);
/* 输出查看增加分区语句*/
SELECT @s1;
PREPARE stmt2 FROM @s1;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
/* 取出最小的分区的名称,并删除掉 。
注意:删除分区会同时删除分区内的数据,慎重 */
/*select partition_name into @P0_Name from INFORMATION_SCHEMA.PARTITIONS
where table_name=‘tb_electric_power_info‘ order by partition_ordinal_position limit 1;
SET @s=concat(‘ALTER TABLE tb_3a_huandan_detail DROP PARTITION ‘,@P0_Name);
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1; */
/* 提交 */
COMMIT ;
END 
3.新建事件在每个月1号触发


————————————————
版权声明:本文为CSDN博主「tyroxyz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38762283/article/details/105578950

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!