mysql 按照月份自动创建表,以年和月为表明,动态生成。

需求:
mysql5.5 数据库,想要根据月份自动创建表,每个月创建一张表,需要数据库自动创建,并根据当前年和月动态生成表名称。
解决办法:

  • 连接数据库工具为Navicat
  • 首先创建存储过程,然后通过创建定时事件执行存储过程。
  • 先查看事件是否开启 show variables like ‘%scheduler%’;
  • 如果未开启则需要开启 set global event_scheduler = 1;

创建存储过程:

  • 点击查询–》新建查询–> 输入以下代码,然后在函数中就可以查看到建立的存储过程。
  • 我这里利用循环一次建立了12张表,以年和月开头为表明。
  • PARTITION BY HASH(GTID) PARTITIONS 100 利用哈希表的形式把每个表分为100个区,提高检索效率
BEGIN
declare i int;
set i=0;
while i<12 do  
    set @sql_create_table_gpstrail = concat(  
'CREATE TABLE IF NOT EXISTS xj_dt_gpstrail', date_format(date_add(curdate(), interval i month),'%Y%m'),  
"(  
    `GTID` int(11) NOT NULL AUTO_INCREMENT,
  `DeviceId` varchar(32) DEFAULT NULL COMMENT '设备ID',
  `Longitude` decimal(18,8) DEFAULT NULL COMMENT '经度',
  `Latitude` decimal(18,8) DEFAULT NULL COMMENT '纬度',
  `Speed` int(11) DEFAULT NULL COMMENT '速度', 
  `LocationTime` datetime DEFAULT NULL COMMENT '定位时间',
  `ReciveTime` datetime DEFAULT NULL COMMENT '接收时间',
  `loginid` int(11) DEFAULT NULL COMMENT '登陆人账号',
  `BdLon` decimal(18,8) DEFAULT NULL COMMENT '百度经度',
  `BdLat` decimal(18,8) DEFAULT NULL COMMENT '百度纬度',
  PRIMARY KEY (`GTID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='GPS轨迹'
PARTITION BY HASH(GTID) 
PARTITIONS 100
");  
  
PREPARE sql_create_table_gpstrail FROM @sql_create_table_gpstrail;     
EXECUTE sql_create_table_gpstrail;  
set i=i+1;
end while;
END

创建执行存储过程的事件:

  • 打开创建的数据库,点击事件按钮,点击新建事件。
  • 在 定义 栏里面输入 CALL sql_create_table_gpstrail(),下面的状态选择ENABLE
    ​​​​在这里插入图片描述
    ​​
  • 在计划栏里面配置如图:表示每一年执行一次,开始时间是 2017-02-01 01:00:00

在这里插入图片描述

  • 保存计划就建立完毕,效果如图:建立了12张gpstrail表 根据年和月份。
    在这里插入图片描述

创建事件也可不按照上面操作,执行sql语句即可:查询中–》新建查询–》执行

CREATE  EVENT EVENT_pro_sql_create_table_gpstrail
ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)  
 ON COMPLETION PRESERVE ENABLE   DO       
 CALL sql_create_table_gpstrail();
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值