zoukankan      html  css  js  c++  java
  • Mysql自动按月分区

    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

  • 相关阅读:
    oracle(八)块清除
    oracle(七)索引
    oracle(六) physical read and logical read
    oracle动态视图(一)stat
    oracle(五)tkprof 使用 transient kernal profile 侧面 轮廓
    dbms_stats.gather_table_stats详解
    oracle(四) 常用语句
    oracle(三) SQL语句
    [Swift]LeetCode269. 外星人词典 $ Alien Dictionary
    [Mac]如何让两个窗口各占半个屏幕
  • 原文地址:https://www.cnblogs.com/javalinux/p/14962960.html
Copyright © 2011-2022 走看看