Mysql分区创建与删除方式

 更新时间:2025年02月11日 09:34:22   作者:Donnedaen  
本文详细介绍了如何在MySQL中创建和删除分区的实例代码,通过实际操作示例,帮助读者理解分区的创建与管理方法,从而更好地优化数据库性能

Mysql分区创建与删除

实例代码

CREATE PROCEDURE `add_table_partition`() 
	COMMENT '增加表分区' 
BEGIN
	/******************************************************************
	*	Creator:	    Donne
	*	Create Date:	2019-05-29
	*	Description:	增加所有表的分区,分区类型为p_date_20190529
                        每月最后一天执行,生成下一个月所有分区
	******************************************************************/
   DECLARE  v_table_name varchar(50);
   DECLARE  v_par_name varchar(20);
   DECLARE i int DEFAULT 0; 
   DECLARE no_more int DEFAULT 0;
   ##将表名和分区名放入游标
   DECLARE cursor_employee CURSOR FOR
   SELECT table_name,max(partition_name)
	 FROM information_schema.partitions 
	WHERE table_schema='test' and partition_name is not null and partition_name<>'p_date_min'
    GROUP BY table_name;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more= 1;
  ##打开游标
  OPEN cursor_employee;
  FETCH cursor_employee INTO v_table_name,v_par_name;
  ##循环 1:ture, 0:false,!0:ture,!1:false
  ##select 1 from where !0
  WHILE !no_more DO
      my_loop: LOOP
         ##从当前开始
         SET @j:= DATE_ADD(curdate(),INTERVAL i DAY);
         ##下个月最后一天
         SET @end_date:= last_day(DATE_ADD(last_day(curdate()),INTERVAL 1 DAY));
         IF @j > @end_date THEN           
            LEAVE my_loop;
         END IF;
         #计数
         SET i=i+1;
         #分区使用values less than,所以+1 
         SET @par_value:= UNIX_TIMESTAMP(DATE_ADD(curdate(),INTERVAL i DAY));
         SET @par_name:= concat('p_date_',date_format(@j,'%Y%m%d'));
         #如果新建分区大于已有分区,则创建
         IF @par_name>v_par_name THEN
             SET @add_par:= concat('ALTER TABLE ',v_table_name,' ADD PARTITION(PARTITION ',@par_name,' VALUES LESS THAN (',@par_value,'));');
             PREPARE stmt from @add_par;
             EXECUTE stmt;
             DEALLOCATE PREPARE stmt;
         END IF;
      END LOOP;
      #重新计数
      SET i= 0;
      #从游标中取出下一条数据
      FETCH cursor_employee INTO v_table_name,v_par_name;
  END WHILE;
  CLOSE cursor_employee;
END 
CREATE PROCEDURE `drop table partition`(
		in start_date date ,
		in end_date date 
) 
	COMMENT '删除分区' 
BEGIN
	/******************************************************************
	*	Creator:	    Donne
	*	Create Date:	2019-05-29
	*	Description:	删除表分区
	******************************************************************/
   DECLARE  v_table_name varchar(50);
   DECLARE  v_par_name varchar(20);
   DECLARE i int DEFAULT 0; 
   DECLARE no_more int DEFAULT 0;
   ##将表名和分区名放入游标
   DECLARE cursor_employee CURSOR FOR
   SELECT table_name,partition_name
	 FROM information_schema.partitions 
	WHERE table_schema='test' and partition_name is not null and partition_name<>'p_date_min'
      AND partition_name>=concat('p_date_',date_format(end_date,'%Y%m%d'))
      AND partition_name<=concat('p_date_',date_format(end_date,'%Y%m%d'));
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more= 1;
  ##打开游标
  OPEN cursor_employee;
  FETCH cursor_employee INTO v_table_name,v_par_name;
  ##循环
  WHILE !no_more DO
      SET @drop_par:= concat('ALTER TABLE ',v_table_name,' DROP PARTITION ',v_par_name,';');
      PREPARE stmt from @drop_par;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
      FETCH cursor_employee INTO v_table_name,v_par_name;
  END WHILE;
  CLOSE cursor_employee;
END 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql 表空间及索引的查看方法

    mysql 表空间及索引的查看方法

    mysql 表空间及索引的查看方法,需要的朋友可以参考下。
    2011-07-07
  • MySQL数据库迁移data文件夹位置详细步骤

    MySQL数据库迁移data文件夹位置详细步骤

    这篇文章主要介绍了MySQL数据库迁移data文件夹详细步骤,需要的朋友可以参考下
    2014-03-03
  • MySQL四种日志binlog/redolog/relaylog/undolog详解

    MySQL四种日志binlog/redolog/relaylog/undolog详解

    undo log主要存储的也是逻辑日志,比如我们要insert一条数据了,那undo log会记录的一条对应的delete日志,我们要update一条记录时,它会记录一条对应相反的update记录,这篇文章主要介绍了MySQL四种日志binlog/redolog/relaylog/undolog,需要的朋友可以参考下
    2024-08-08
  • MySQL中count(*)、count(1)和count(col)的区别汇总

    MySQL中count(*)、count(1)和count(col)的区别汇总

    count()函数是用来统计表中记录的一个函数,返回匹配条件的行数,下面这篇文章主要给大家总结介绍了关于MySQL中count(*)、count(1)和count(col)的区别,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2018-03-03
  • 浅谈MySQL在cmd和python下的常用操作

    浅谈MySQL在cmd和python下的常用操作

    下面小编就为大家带来一篇浅谈MySQL在cmd和python下的常用操作。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • MySQL数据库服务器端核心参数详解和推荐配置

    MySQL数据库服务器端核心参数详解和推荐配置

    MySQL手册上也有服务器端参数的解释,以及参数值的相关说明信息,现针对我们大家重点需要注意、需要修改或影响性能 的服务器端参数,作其用处的解释和如何配置参数值的推荐,此事情拖了不少时间,为方便大家帮忙纠错
    2011-12-12
  • 详解MySQL数据库优化的八种方式(经典必看)

    详解MySQL数据库优化的八种方式(经典必看)

    关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂。今天给大家分享一篇文章关于mysql数据库优化的八种方式,非常经典,需要的的朋友参考下
    2017-03-03
  • 安装mysql 8.0.17并配置远程访问的方法

    安装mysql 8.0.17并配置远程访问的方法

    这篇文章主要介绍了安装mysql 8.0.17并配置远程访问的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • mysql 8.0.11 安装配置方法图文教程(win10)

    mysql 8.0.11 安装配置方法图文教程(win10)

    这篇文章主要为大家详细介绍了mysql 8.0.11 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • Mysql ID生成策略的三种方法选择及优缺点

    Mysql ID生成策略的三种方法选择及优缺点

    mysql ID生成策略一般常用的有三种,包括自增、UUID 以及雪花算法,本文主要介绍了Mysql ID生成策略的三种方法选择及优缺点,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06

最新评论