mysql按天自动生成表分区的执行语句

Wesley13
• 阅读 683
CREATE TABLE `jk_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '数据ID主键',
  `jk_date` datetime NOT NULL COMMENT '时间日期格式',
  `jk_time` int(11) DEFAULT NULL COMMENT 'Unit格式的时间',
  `jk_sn` varchar(20) DEFAULT NULL COMMENT '设备序列号SN',
  `jk_counter` int(11) DEFAULT '0' COMMENT '设备计数器',
  `jk_ip` varchar(50) DEFAULT NULL COMMENT '设备在网络中的ip地址',
  `jk_isphysical` tinyint(2) DEFAULT '0' COMMENT '是否匹配了物理公式',
  `jk_eid` tinyint(4) DEFAULT '0' COMMENT 'ID号',
  `jk_wid` tinyint(2) DEFAULT '0' COMMENT '通道',
  `jk_wave` int(11) DEFAULT '0' COMMENT '波长',
  `jk_phyvalue` decimal(10,6) DEFAULT '0.000000' COMMENT '物理量',
  `jk_serialnum` varchar(20) DEFAULT NULL COMMENT '序列号',
  `jk_error` tinyint(2) DEFAULT '0' COMMENT '错误代码',
  `jk_warning` tinyint(2) DEFAULT '0' COMMENT '警告代码',
  PRIMARY KEY (`id`,`jk_date`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=304894 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (TO_DAYS(jk_date)-1)
(PARTITION jk_data20201109 VALUES LESS THAN (738103) ENGINE = InnoDB,
 PARTITION jk_data20201110 VALUES LESS THAN (738104) ENGINE = InnoDB,
 PARTITION jk_data20201111 VALUES LESS THAN (738105) ENGINE = InnoDB,
 PARTITION jk_data20201112 VALUES LESS THAN (738106) ENGINE = InnoDB,
 PARTITION jk_data20201113 VALUES LESS THAN (738107) ENGINE = InnoDB,
 PARTITION jk_data20201114 VALUES LESS THAN (738108) ENGINE = InnoDB,
 PARTITION jk_data20201115 VALUES LESS THAN (738109) ENGINE = InnoDB,
 PARTITION jk_data20201116 VALUES LESS THAN (738110) ENGINE = InnoDB,
 PARTITION jk_data20201117 VALUES LESS THAN (738111) ENGINE = InnoDB,
 PARTITION jk_data20201118 VALUES LESS THAN (738112) ENGINE = InnoDB) */

创建存储过程

DROP PROCEDURE IF EXISTS topv.create_partition_jkdata;
CREATE DEFINER=`topv`@`%` PROCEDURE `create_partition_jkdata`()
BEGIN
/* 事务回滚,其实放这里没什么作用,ALTER TABLE是隐式提交,回滚不了的。*/
    DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
    START TRANSACTION;

/* 到系统表查出这个表的最大分区,得到最大分区的日期。在创建分区的时候,名称就以日期格式存放,方便后面维护 */
    SELECT REPLACE(partition_name,'jk_data','') INTO @P12_Name FROM INFORMATION_SCHEMA.PARTITIONS
    WHERE table_name='jk_data' 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 jk_data ADD PARTITION (PARTITION jk_data',@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='jk_data' order by partition_ordinal_position limit 1;
    SET @s=concat('ALTER TABLE jk_data DROP PARTITION ',@P0_Name);
    PREPARE stmt1 FROM @s;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1; */
/* 提交 */
    COMMIT ;
 END;

Done!

本文同步分享在 博客“漏刻有时”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这