需求: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(); ;