Mysql自动按月分区

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

  1. 需要先创建至少一个分区 例:创建第一个分区时间小于’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’))
    )
  2. 创建存储过程自动分区
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号触发

你可能感兴趣的:(MySQL)