MySQL动态创建分区
2015-07-02 17:28
741 查看
按日期分区的数据表,我们希望每年、每个月甚至每天动态创建一个分区,这种情况就需要用事件和存储过程来实现动态添加分区,下面的存储过程是按年分区增加当年分区的过程:
BEGIN #Routine body goes here... DECLARE currentTime date DEFAULT CURDATE(); DECLARE partName VARCHAR(12); DECLARE i_part_name VARCHAR(12); DECLARE i_flag INT DEFAULT 0; DECLARE currentYear INT DEFAULT 0; #指针遍历分区名,避免定义重复分区名 DECLARE cur_partition CURSOR for select partition_name part from information_schema.PARTITIONS where TABLE_SCHEMA = schema() and TABLE_NAME='test'; #此句必须添加,不然会出现死循环,含义是当遍历指针为空后赋值此变量为NULL DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET i_part_name = NULL; #定义欲创建的分区名,用于遍历匹配已有分区名 SET partName=CONCAT('part_',YEAR(currentTime)); OPEN cur_partition; FETCH cur_partition into i_part_name; WHILE (i_part_name IS NOT NULL) DO IF i_part_name = partName THEN SET i_flag = 1; END IF; FETCH cur_partition into i_part_name; END WHILE; CLOSE cur_partition; #如果没有创建分区则创建当前年份的分区 IF i_flag = 0 THEN SET currentYear=YEAR(currentTime) + 1; SET @v_add_s = CONCAT('ALTER TABLE test ADD PARTITION (PARTITION ',partName,' VALUES LESS THAN (',currentYear,'))'); prepare stmt from @v_add_s; execute stmt; deallocate prepare stmt; END IF; END
相关文章推荐
- Mac下安装 MySQLdb
- mysql 游标嵌套循环实例
- mysql二进制日志(bin-log)配置及相关操作
- MySQL相关问题
- RedHat6下源码安装MySQL5.6
- 清理mysql的sleep链接
- mysql修改主键
- mysql触发器
- MySQL基础笔记(四) 索引
- MySQL基础笔记(四) 索引
- MYSQL查询语句优化
- c mysql 连接 过程
- MYSQL隔离级别及测试包括脏读,幻读
- java使用jdbc对mysql数据库进行操作的步骤和代码
- MySQL常用命令
- Mysql MERGE引擎简介
- mac下彻底卸载mysql方法
- mysql-5.6.25-winx64免安装配置
- MySQL配置
- mysql修改密码