mysql 按天创建分区存储过程

摘要:
CREATEPROCEDURE`create_partition_by_day`(IN_SCHEMANAMEVARCHAR(64),IN_TABLENAMEVARCHAR(64))BEGIN#当前日期存在的分区的个数DECLAREROWS_CNTINTUNSIGNED;#目前日期,为当前日期的后一天DECLARETARGET_DATETIMESTAMP;#分区的名称,格式为p20180620DEC
CREATE PROCEDURE `create_partition_by_day`(IN_SCHEMANAME VARCHAR(64), IN_TABLENAME VARCHAR(64))
BEGIN#当前日期存在的分区的个数
    DECLARE ROWS_CNT INTUNSIGNED;
    #目前日期,为当前日期的后一天
    DECLARE TARGET_DATE TIMESTAMP;
    #分区的名称,格式为p20180620
    DECLARE PARTITIONNAME VARCHAR(9);
    #当前分区名称的分区值上限,即为 PARTITIONNAME + 1
    DECLARE PARTITION_ADD_DAY VARCHAR(9);
    SET TARGET_DATE = NOW() + INTERVAL 1 DAY;
    SET PARTITIONNAME = DATE_FORMAT( TARGET_DATE, 'p%Y%m%d');
    SET TARGET_DATE = TARGET_DATE + INTERVAL 1 DAY;
    SET PARTITION_ADD_DAY = DATE_FORMAT( TARGET_DATE, '%Y%m%d');
    SELECT COUNT(*) INTO ROWS_CNT FROMinformation_schema.partitions
    WHERE table_schema = IN_SCHEMANAME AND table_name = IN_TABLENAME AND partition_name =PARTITIONNAME;
    IF ROWS_CNT = 0 THEN
        SET @SQL = CONCAT( 'ALTER TABLE `', IN_SCHEMANAME, '`.`', IN_TABLENAME, '`',
        'ADD PARTITION (PARTITION ', PARTITIONNAME, " VALUESLESS THAN (",
            PARTITION_ADD_DAY ,") ENGINE =InnoDB);" );
        PREPARE STMT FROM @SQL;
        EXECUTESTMT;
        DEALLOCATE PREPARESTMT;
     ELSE
       SELECT CONCAT("partition `", PARTITIONNAME, "` for table `",IN_SCHEMANAME, ".", IN_TABLENAME, "` already exists") ASresult;
     END IF;
END

#分区范围

PARTITION BY RANGE (YEAR(request_time)*10000+MONTH(request_time)*100+DAY(request_time))

#调用刚才创建的存储过程,第一个参数是数据库名称,第二个参数是表名称
CALL create_partition_by_day('test','test');

免责声明:文章转载自《mysql 按天创建分区存储过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[置顶] 在C#中SendMessage和PostMessage的参数传递C# 串口 已关闭 Safe handle下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL联合多表更新和删除

多表更新在 MySQL 3.23 中,你能够使用 LIMIT # 来确保仅仅有给定的记录行数目被更改。 假设一个 ORDER BY 子句被使用(从 MySQL 4.0.0 開始支持),记录行将以指定的次序被更新。这实际上仅仅有连同 LIMIT 一起才实用。 从 MySQL 4.0.4 開始,你也能够运行一个包括多个表的 UPDATE 的操作: UPDA...

MySQL通过自定义函数以及存储过程实现递归查询父级ID

1.存储过程定义  存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译 2.为什么用存储过程实现树结构数据查询父级节点  1、能完成较复杂的运算与判断    2、可编程行强,灵活    3、SQL编程的代码可重复使用    4、预编译机制    5、减少...

noodjs(koa)+mysql搭建服务器环境及基本的增删改查操作

手动创建项目文件 1.在指定目录下,右击创建项目文件夹。2.使用git init 命令把此文件下内容变成可由git进行版本控制的文件。3.执行“npm init -y”命令,创建package.json文件,初始化4.执行“npm init koa”命令,安装koa,此时项目路径下会生成一个package-lock.json文件。 创建server 1.创...

MySQL5.7 的新特点

1、安全性 MySQL 5.7 的目标是成为发布以来最安全的 MySQL 服务器,其在 SSL/TLS 和全面安全开发方面有一些重要的改变。 mysql.user表结构升级 MySQL5.7用户表mysql.user的plugin字段不允许为空,默认值是mysql_native_password,而不是mysql_old_password,不再支持旧密码格...

转 mysql mysql命令行中执行sql的几种方式总结

https://www.jb51.net/article/96394.htm 1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013-09-18 13:55:45 | +---------------------...

MySQL5.6 与 MySQL5.7 的区别

目录 编译安装区别 初始化的区别 其他区别 编译安装区别 # 5.7在编译安装的时候多了一个 boost 库 [root@db02 mysql-5.7.20]# yum install -y gcc gcc-c++ automake autoconf make cmake bison-devel ncurses-devel libaio-dev...