PARTITION p20160524 VALUES LESS THAN (TO_DAYS('2016-05-24')),
PARTITION p20160525 VALUES LESS THAN (TO_DAYS('2016-05-25')),
PARTITION p20160526 VALUES LESS THAN (TO_DAYS('2016-05-26')),
PARTITION p20160527 VALUES LESS THAN (TO_DAYS('2016-05-27'))
)
其次,分区存储过程
DELIMITER $$
USE `sdk`$$
ROP PROCEDURE IF EXISTS `create_Partition_3Ahuadan`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `create_Partition_3Ahuadan`()
EGIN
/* 事务回滚 , 其实放这里没什么作用 , ALTER TABLE是隐式提交 , 回滚不了的 。*/
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
START TRANSACTION;
/* 到系统表查出这个表的最大分区 , 得到最大分区的日期 。在创建分区的时候 , 名称就以日期格式存放 , 方便后面维护 */
SELECT REPLACE(partition_name,'p','') INTO @P12_Name FROM INFORMATION_SCHEMA.PARTITIONS
WHERE table_name='tb_3a_huandan_detail' ORDER BY partition_ordinal_position DESC LIMIT 1;
SET @Max_date= DATE(DATE_ADD(@P12_Name+0, INTERVAL 1 DAY))+0;
/* 修改表 , 在最大分区的后面增加一个分区 , 时间范围加1天 */
SET @s1=CONCAT('ALTER TABLE tb_3a_huandan_detail ADD PARTITION (PARTITION p',@Max_date,' VALUES LESS THAN (TO_DAYS (''',DATE(@Max_date),''')))');
/* 输出查看增加分区语句*/
SELECT @s1;
PREPARE stmt2 FROM @s1;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
/* 取出最小的分区的名称 , 并删除掉。
注意:删除分区会同时删除分区内的数据 , 慎重 */
/*select partition_name into @P0_Name from INFORMATION_SCHEMA.PARTITIONS
where table_name='tb_3a_huandan_detail' order by partition_ordinal_position limit 1;
SET @s=concat('ALTER TABLE tb_3a_huandan_detail DROP PARTITION ',@P0_Name);
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1; */
/* 提交 */
COMMIT ;
END$$
DELIMITER ;
最后 , 增加定时事件
DELIMITER ||
CREATE EVENT Partition_3Ahuadan_event
ON SCHEDULE
EVERY 1 day STARTS '2016-05-27 23:59:59'
DO
BEGIN
CALL nres.`create_Partition_3Ahuadan`;
END ||
DELIMITER ;
【mysql 分区表使用介绍】
推荐阅读
- 虚拟服务器端口映射的设置方法
- MySQL主从复制没使用过?三大步骤让你从原理、业务上理解透彻
- 网线钳的使用步骤 网线钳用法
- 内外有别!相对汽车内循环而言外循环使用更有技巧
- 冬天来了 汽车暖气使用有讲究,使用不当会费油
- 秋冬季节汽车保养常识,机油更换记住3点,减少故障延长使用寿命
- 汽车上的"Auto H"按键使用法则,你了解吗?
- Mysql报too many connections详解
- Mysql访问中间件--Atlas初探
- 我常用的免费MySQL图形化管理工具
