使用mysql存储过程写的按天进行表分区
来源:互联网 发布:看gv的软件 编辑:程序博客网 时间:2024/05/17 07:30
DROP PROCEDURE IF EXISTS createTablePartition;
CREATE PROCEDURE createTablePartition()
BEGIN
DECLARE currentYear INT DEFAULT 2013;
DECLARE last_year INT DEFAULT 2012;
DECLARE next_year INT DEFAULT 2014;
DECLARE janunary_max_day VARCHAR(32) DEFAULT '01-31';
DECLARE march_max_day VARCHAR(32) DEFAULT '03-31';
DECLARE may_max_day VARCHAR(32) DEFAULT '05-31';
DECLARE july_max_day VARCHAR(32) DEFAULT '07-31';
DECLARE aug_max_day VARCHAR(32) DEFAULT '08-31';
DECLARE october_max_day VARCHAR(32) DEFAULT '10-31';
DECLARE decem_max_day VARCHAR(32) DEFAULT '12-31';
DECLARE april_max_day VARCHAR(32) DEFAULT '04-30';
DECLARE june_max_day VARCHAR(32) DEFAULT '06-30';
DECLARE novem_max_day VARCHAR(32) DEFAULT '11-30';
DECLARE septem_max_day VARCHAR(32) DEFAULT '09-30';
DECLARE febru_max_day VARCHAR(32) DEFAULT '02-22';
DECLARE temp_month VARCHAR(32);
DECLARE temp_day VARCHAR(32);
DECLARE the_max_day_in_month int;
DECLARE temp_strDate VARCHAR(32);
DECLARE temp_partition BLOB;
DECLARE i int;
DECLARE j int;
set i=1;
set j=1;
set febru_max_day=LAST_DAY(STR_TO_DATE(CONCAT(currentYear,'-',febru_max_day),'%Y-%m-%d %H:%i:%s'));#SET FEBRUARY LAST DAY
set currentYear=YEAR(CURDATE());# GET CURRENT YEAR
set next_year=currentYear+1;
set temp_partition=CONCAT('','ALTER TABLE test_history2 PARTITION BY RANGE(','TO_DAYS(COLLECT_TIME)) (');
while(i<=12)do
if i>9 THEN
set temp_month=CONCAT('',i);
else
set temp_month=CONCAT('0',i);
end if;
if (temp_month = MONTH(CONCAT(currentYear,'-',janunary_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',march_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',may_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',july_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',aug_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',october_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',decem_max_day)))THEN
set the_max_day_in_month = 31;
elseif (temp_month = MONTH(CONCAT(currentYear,'-',april_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',june_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',septem_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',novem_max_day)))THEN
set the_max_day_in_month = 30;
else
set the_max_day_in_month = DAY(febru_max_day);
end if;
set j=1;
while(j<=the_max_day_in_month)DO
if j>9 THEN
set temp_day=CONCAT('',j);
else
set temp_day=CONCAT('0',j);
end if;
set temp_strDate=CONCAT(currentYear,'-',temp_month,'-',temp_day,' ','00:00:00');
set temp_partition=CONCAT(temp_partition,'PARTITION p',currentYear,'',temp_month,'',temp_day,' VALUES LESS THAN(','TO_DAYS("',temp_strDate,'")),');
SET j=j+1;
end while;
# SELECT the_max_day_in_month,temp_month;
set i=i+1;
end while;
set temp_strDate=CONCAT(next_year,'-01','-','01',' ','00:00:00');
set temp_partition=CONCAT(temp_partition,'PARTITION p',next_year,'0101',' VALUES LESS THAN(','TO_DAYS("',temp_strDate,'")),');
set temp_partition=CONCAT(temp_partition,'PARTITION theMaxPartition VALUES LESS THAN MAXVALUE');
set temp_partition=CONCAT(temp_partition,');');
SELECT temp_partition;
SET @sql1=temp_partition;
PREPARE sql2 FROM @sql1;
EXECUTE sql2;
DEALLOCATE PREPARE sql2;
#first,get the max day for every month;
# SELECT LAST_DAY(STR_TO_DATE(CONCAT(currentYear,'-',febru_max_day),'%Y-%m-%d %H:%i:%s'));
END;
call createTablePartition();
CREATE PROCEDURE createTablePartition()
BEGIN
DECLARE currentYear INT DEFAULT 2013;
DECLARE last_year INT DEFAULT 2012;
DECLARE next_year INT DEFAULT 2014;
DECLARE janunary_max_day VARCHAR(32) DEFAULT '01-31';
DECLARE march_max_day VARCHAR(32) DEFAULT '03-31';
DECLARE may_max_day VARCHAR(32) DEFAULT '05-31';
DECLARE july_max_day VARCHAR(32) DEFAULT '07-31';
DECLARE aug_max_day VARCHAR(32) DEFAULT '08-31';
DECLARE october_max_day VARCHAR(32) DEFAULT '10-31';
DECLARE decem_max_day VARCHAR(32) DEFAULT '12-31';
DECLARE april_max_day VARCHAR(32) DEFAULT '04-30';
DECLARE june_max_day VARCHAR(32) DEFAULT '06-30';
DECLARE novem_max_day VARCHAR(32) DEFAULT '11-30';
DECLARE septem_max_day VARCHAR(32) DEFAULT '09-30';
DECLARE febru_max_day VARCHAR(32) DEFAULT '02-22';
DECLARE temp_month VARCHAR(32);
DECLARE temp_day VARCHAR(32);
DECLARE the_max_day_in_month int;
DECLARE temp_strDate VARCHAR(32);
DECLARE temp_partition BLOB;
DECLARE i int;
DECLARE j int;
set i=1;
set j=1;
set febru_max_day=LAST_DAY(STR_TO_DATE(CONCAT(currentYear,'-',febru_max_day),'%Y-%m-%d %H:%i:%s'));#SET FEBRUARY LAST DAY
set currentYear=YEAR(CURDATE());# GET CURRENT YEAR
set next_year=currentYear+1;
set temp_partition=CONCAT('','ALTER TABLE test_history2 PARTITION BY RANGE(','TO_DAYS(COLLECT_TIME)) (');
while(i<=12)do
if i>9 THEN
set temp_month=CONCAT('',i);
else
set temp_month=CONCAT('0',i);
end if;
if (temp_month = MONTH(CONCAT(currentYear,'-',janunary_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',march_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',may_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',july_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',aug_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',october_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',decem_max_day)))THEN
set the_max_day_in_month = 31;
elseif (temp_month = MONTH(CONCAT(currentYear,'-',april_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',june_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',septem_max_day)) OR temp_month = MONTH(CONCAT(currentYear,'-',novem_max_day)))THEN
set the_max_day_in_month = 30;
else
set the_max_day_in_month = DAY(febru_max_day);
end if;
set j=1;
while(j<=the_max_day_in_month)DO
if j>9 THEN
set temp_day=CONCAT('',j);
else
set temp_day=CONCAT('0',j);
end if;
set temp_strDate=CONCAT(currentYear,'-',temp_month,'-',temp_day,' ','00:00:00');
set temp_partition=CONCAT(temp_partition,'PARTITION p',currentYear,'',temp_month,'',temp_day,' VALUES LESS THAN(','TO_DAYS("',temp_strDate,'")),');
SET j=j+1;
end while;
# SELECT the_max_day_in_month,temp_month;
set i=i+1;
end while;
set temp_strDate=CONCAT(next_year,'-01','-','01',' ','00:00:00');
set temp_partition=CONCAT(temp_partition,'PARTITION p',next_year,'0101',' VALUES LESS THAN(','TO_DAYS("',temp_strDate,'")),');
set temp_partition=CONCAT(temp_partition,'PARTITION theMaxPartition VALUES LESS THAN MAXVALUE');
set temp_partition=CONCAT(temp_partition,');');
SELECT temp_partition;
SET @sql1=temp_partition;
PREPARE sql2 FROM @sql1;
EXECUTE sql2;
DEALLOCATE PREPARE sql2;
#first,get the max day for every month;
# SELECT LAST_DAY(STR_TO_DATE(CONCAT(currentYear,'-',febru_max_day),'%Y-%m-%d %H:%i:%s'));
END;
call createTablePartition();
- 使用mysql存储过程写的按天进行表分区
- mysql通过存储过程对表分区进行重新分区
- MySQL 按月给表分区存储过程
- mysql 使用游标进行删除操作的存储过程
- mysql自动分区存储过程
- mysql 5.6 版本,对在使用的表进行分区
- 在mysql 下写的存储过程
- mysql---写存储过程需要的知识点
- 利用navicat写mysql的存储过程
- 使用存储过程和Event事件为Mysql表自动建立分区
- 按季度创建分区的存储过程
- mysql 存储过程的使用
- mysql 存储过程的使用
- MySQL存储过程的使用
- 使用存储过程进行分页的—存储过程
- mysql存储过程按月创建表分区 方式一
- mysql存储过程按月创建表分区 方式二
- mysql表根据时间戳字段创建表分区的存储过程
- Dice Throwing
- Eclipse调试Java的10个技巧
- 搭建ssh1步骤
- CCSprite的惯性拖动
- France '98
- 使用mysql存储过程写的按天进行表分区
- 123
- Ural 1277 - Cops and Thieves 无向图的最小点割
- linux mongodb 启动命令
- C语言中嵌入SQL
- grep
- oracle监听 动态注册与静态注册
- Boastin' Red Socks
- 深入理解dp,px,以及density。