按天自动创建分区(创建当天日期后两天的):
CREATE DEFINER=`root`@`%` PROCEDURE `P_CREATE_PARTITION_BY_DAY`(IN_SCHEMANAME VARCHAR(64), IN_TABLENAME VARCHAR(64)) BEGIN #当前日期存在的分区的个数 DECLARE ROWS_CNT INT UNSIGNED; #目前日期,为当前日期的后一天 DECLARE TARGET_DATE TIMESTAMP; #分区的名称,格式为p20180620 DECLARE PARTITIONNAME VARCHAR(9); #当前分区名称的分区值上限,即为 PARTITIONNAME + 1 DECLARE PARTITION_ADD_DAY VARCHAR(9); SET TARGET_DATE = NOW() + INTERVAL 2 DAY; SET PARTITIONNAME = DATE_FORMAT( TARGET_DATE, 'p%Y%m%d' ); select TO_DAYS(DATE_FORMAT( TARGET_DATE, '%Y%m%d' )) INTO PARTITION_ADD_DAY from dual limit 1; SELECT COUNT(*) INTO ROWS_CNT FROM information_schema.partitions WHERE table_schema = IN_SCHEMANAME COLLATE utf8_general_ci AND table_name = IN_TABLENAME COLLATE utf8_general_ci AND partition_name = PARTITIONNAME COLLATE utf8_general_ci ; IF ROWS_CNT = 0 THEN SET @SQL = CONCAT( 'ALTER TABLE `', IN_SCHEMANAME, '`.`', IN_TABLENAME, '`', ' ADD PARTITION (PARTITION ', PARTITIONNAME, " VALUES LESS THAN (", PARTITION_ADD_DAY ,") ENGINE = InnoDB);" ); PREPARE STMT FROM @SQL; EXECUTE STMT; DEALLOCATE PREPARE STMT; ELSE SELECT CONCAT("partition `", PARTITIONNAME, "` for table `",IN_SCHEMANAME, ".", IN_TABLENAME, "` already exists") AS result; END IF; END
创建之前的分区:
CREATE DEFINER=`root`@`%` PROCEDURE `test`(IN_SCHEMANAME VARCHAR(64), IN_TABLENAME VARCHAR(64)) BEGIN #当前日期存在的分区的个数 DECLARE ROWS_CNT INT UNSIGNED; #目前日期,为当前日期的后一天 -- DECLARE TARGET_DATE TIMESTAMP; #分区创建开始日期 DECLARE TARGET_DATE_START TIMESTAMP; #分区的名称,格式为p20180620 DECLARE PARTITIONNAME VARCHAR(9); #当前分区名称的分区值上限,即为 PARTITIONNAME + 1 DECLARE PARTITION_ADD_DAY VARCHAR(9); SET TARGET_DATE_START = NOW() + INTERVAL -1 YEAR; #一年前 到 今天的后两天的分区 WHILE (TARGET_DATE_START < (NOW()+ INTERVAL 2 DAY)) DO SET PARTITIONNAME = DATE_FORMAT( TARGET_DATE_START , 'p%Y%m%d' ); select TO_DAYS(DATE_FORMAT( TARGET_DATE_START, '%Y%m%d' )) INTO PARTITION_ADD_DAY from dual limit 1; SELECT COUNT(*) INTO ROWS_CNT FROM information_schema.partitions WHERE table_schema = IN_SCHEMANAME COLLATE utf8_general_ci AND table_name = IN_TABLENAME COLLATE utf8_general_ci AND partition_name = PARTITIONNAME COLLATE utf8_general_ci ; IF ROWS_CNT = 0 THEN SET @SQL = CONCAT( 'ALTER TABLE `', IN_SCHEMANAME, '`.`', IN_TABLENAME, '`', ' ADD PARTITION (PARTITION ', PARTITIONNAME, " VALUES LESS THAN (", PARTITION_ADD_DAY ,") ENGINE = InnoDB);" ); PREPARE STMT FROM @SQL; EXECUTE STMT; DEALLOCATE PREPARE STMT; END IF; SET TARGET_DATE_START = TARGET_DATE_START + INTERVAL 1 DAY; END WHILE; END
本文来自博客园,作者:哈利波特甜,转载请注明原文链接:https://www.cnblogs.com/zmh-980509/p/16309292.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2019-05-25 教师派10
2019-05-25 教师派9
2019-05-25 教师派8
2019-05-25 教师派7