美文网首页
mysql 数据库自动分区 存储过程

mysql 数据库自动分区 存储过程

作者: 宝_0350 | 来源:发表于2020-04-05 12:49 被阅读0次

    BEGIN

    set @p_name =  CONCAT(dtable,'_p',date_format(DATE_ADD(curdate(),interval 2 MONTH),'%Y%m'));

    SET @exist=(

    SELECT 

      COUNT(*) 

    FROM 

      INFORMATION_SCHEMA.partitions 

    WHERE 

      TABLE_SCHEMA = schema() 

      AND TABLE_NAME= dtable AND partition_name=@p_name);

    SELECT @exist,@p_name;

    if @exist <1 then

    -- 提前建立包含当前时间的分区

    set @p_date =  date_format(DATE_ADD(curdate(),interval 3 MONTH),'%Y-%m-01');

    set @p_sql = CONCAT('ALTER TABLE ',dtable,' ADD PARTITION(PARTITION ',@p_name,' VALUES LESS THAN ( unix_timestamp(\'',@p_date,'\')))');

    PREPARE stmt FROM @p_sql;

    EXECUTE stmt;

    DEALLOCATE PREPARE stmt;

    end if;

    -- 清除半年以前的数据和分区

    set @oldp_name =  CONCAT(dtable,'_p',date_format(DATE_ADD(curdate(),interval -7 MONTH),'%Y%m'));

    SET @exist=(

    SELECT 

    COUNT(*) 

    FROM 

    INFORMATION_SCHEMA.partitions 

    WHERE 

    TABLE_SCHEMA = schema() 

    AND TABLE_NAME= dtable AND partition_name=@oldp_name);

    SELECT @exist,@oldp_name;

    if @exist >0 then

    set @p_sql = CONCAT('ALTER TABLE ',dtable,' DROP PARTITION ',@oldp_name);

    PREPARE stmt FROM @p_sql;

    EXECUTE stmt;

    DEALLOCATE PREPARE stmt;

    end if;

    -- call setpartitionplan('a000')

    END

    相关文章

      网友评论

          本文标题:mysql 数据库自动分区 存储过程

          本文链接:https://www.haomeiwen.com/subject/rfkuphtx.html