logo头像

技术是一种信念

mysql数据库自动建表

根据项目需要对于车辆轨迹数据想要根据月份自动创建表,每个月创建一张表,需要数据库自动创建,并根据当前年和月动态生成表名称。具体的实现方法如下所示。

创建存储过程

  • 点击查询–》新建查询–> 输入以下代码,然后在函数中就可以查看到建立的存储过程。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
BEGIN
declare i int;
set i=0;
while i<12 do
set @sql_create_table_gpscartrail = concat(
'CREATE TABLE IF NOT EXISTS gps_实时轨迹_', date_format(date_add(curdate(), interval i month),'%Y%m'),
"(
`OID` varchar(32) NOT NULL,
`设备ID` varchar(32) DEFAULT NULL,
`设备序列号` varchar(32) DEFAULT NULL,
`SIM卡号` varchar(32) NOT NULL,
`经度` int(11) DEFAULT NULL,
`纬度` int(11) DEFAULT NULL,
`速度` int(11) NOT NULL,
`方向` int(11) NOT NULL,
`高程` int(11) DEFAULT NULL,
`报警标志` varchar(32) DEFAULT NULL,
`上报时间` datetime DEFAULT NULL,
`系统时间` varchar(32) NOT NULL,
`状态` varchar(32) NOT NULL,
`备注` text,
`数据状态` varchar(8) DEFAULT NULL,
`里程` varchar(14) DEFAULT NULL,
`纠偏经度` double(11,6) DEFAULT NULL,
`纠偏纬度` double(11,6) DEFAULT NULL,
PRIMARY KEY (`OID`,`上报时间`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='gps实时轨迹'
PARTITION BY HASH(day(上报时间))
PARTITIONS 31
");

PREPARE sql_create_table_gpscartrail FROM @sql_create_table_gpscartrail;
EXECUTE sql_create_table_gpscartrail;
set i=i+1;
end while;
END

为了提高检索效率,这里使用分区的方法:PARTITION BY HASH(day(上报时间)) PARTITIONS 100 利用哈希表的形式把每个表分为31个区。

创建执行存储过程的事件

开启事件

  • 先查看事件是否开启
1
show variables like '%scheduler%';

MySQL事件调度器event_scheduler负责调用事件,它默认是关闭的。这个调度器不断地监视一个事件是否要调用, 要创建事件,必须打开调度器。

  • 如果未开启则需要开启,可以使用下面任意命令执行:
1
2
set GLOBAL event_scheduler = 1;
SET GLOBAL event_scheduler = ON;

使用工具

  • 创建事件,调用刚刚创建的create_gps_car_trails_every_mon存储过程。

    1
    2
    3
    BEGIN
    CALL create_gps_car_trails_every_mon();
    END
  • 设置时间状态为enable,如下图所示:

image

  • 设定执行时间:表示每一年执行一次,开始时间是 2017-02-01 01:00:00

img

  • 保存计划就建立完毕,效果如图:建立了12张gpstrail表 根据年和月份。

img

直接执行语句

  • 创建事件也可不按照上面操作,执行sql语句即可
1
2
3
4
5
6
7
8
9
10
11
CREATE EVENT event_create_gps_car_trails_every_mon1 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 create_gps_car_trails_every_mon ();