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

需求:mysql5.5 数据库,想要根据月份自动建立表,每月建立一张表,须要数据库自动建立,并根据当前年和月动态生成表名称mysql

 

解决办法:1 链接数据库工具为Navicatgit

       2  首先建立存储过程,而后经过建立定时事件执行存储过程。sql

              3  先查看事件是否开启          show variables like '%scheduler%';数据库

     4  若是未开启则须要开启       set global event_scheduler = 1;函数

 

建立存储过程:工具

 1 点击查询--》新建查询--> 输入如下代码,而后在函数中就能够查看到创建的存储过程。spa

   2   我这里利用循环一次创建了12张表,以年和月开头为代表。code

  3     PARTITION BY HASH(GTID)        PARTITIONS 100   利用哈希表的形式把每一个表分为100个区,提升检索效率orm

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

 

建立执行存储过程的事件:blog

   1   打开建立的数据库,点击事件按钮,点击新建事件。

  2  在 定义 栏里面输入 CALL sql_create_table_gpstrail(),下面的状态选择ENABLE

     

    3   在计划栏里面配置如图:表示每年执行一次,开始时间是 2017-02-01 01:00:00

   4  保存计划就创建完毕,效果如图:创建了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(); ;