mysql event scheduler机制 与 动态表名创建
今天有一個需求,需要定時在mysql創建表與刪除表,以及根據日期命名表名。誠然,通過外部程序很容易實現與控制這一切。
但是需要額外的服務需要維護,以及實現其它的調度機制。為了提高服務的穩定性,可維護性,所以打算研究一下mysql的event scheduler機制。
在網上了解了一下這方面內容,非常雜亂。而且基本雷同。經過自己的摸索,終于實現。算是對其它文章的一個補充。
方案如下:(mysql 5.1以后版本)
1. 查看當前是否已開啟event scheduler機制,檢查方法:SHOW VARIABLES LIKE 'event_scheduler'; 如果顯示的值為OFF,則首先需要開啟。
2. 開啟方法: 修改 /etc/my.cnf 文件?
[mysqld]
添加 event_scheduler=ON
3 . 重啟 mysql ?服務。
4. ?create event 語法:
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
5. ?范例:
CREATE DEFINER = hotonline EVENT IF NOT EXISTS create_aronline_evnet
ON SCHEDULE EVERY 1 DAY STARTS '2013-03-17 12:00:00'
DO
call create_aronline_procedure();
其中?create_aronline_evnet 為 event 名稱,建好以后可以去 mysql.event表查詢。
? ? ? ?EVERY 1 DAY STARTS '2013-03-17 12:00:00' 為自從 2013-03-17 12:00:00 ?開始 每天運行一次。
? ? ? call create_aronline_procedure(); 為執行的一個存儲過程。
-------- 以上即為 event scheduler 的機制,具體語法請參考mysql 文檔,或網上其它文檔 -------------- ?
6. ?mysql 動態表名的實現:( 通過一般sql 是無法實現的,需要prepare支持,一下為存儲過程封裝的)
delimiter $$
create procedure create_aronline_procedure()
begin
set @prefix = 'CREATE TABLE IF NOT EXISTS ';
set @tablename = CONCAT('ar_online_',date_format(date_add(now(), interval 1 day),'%Y_%m_%d'));
set @suffix = '(id bigint(20) NOT NULL AUTO_INCREMENT,seed bigint(20) DEFAULT NULL,vid bigint(20) DEFAULT NULL,count int(11) NOT NULL,score double DEFAULT NULL,update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY pair (seed,vid)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8';
set @create_sql = concat(@prefix,@tablename,@suffix);
prepare stmt from @create_sql;
execute stmt;
deallocate prepare stmt;
end;
$$
delimiter ;
核心語法為紅色標注的。
set @tablename = CONCAT('ar_online_',date_format(date_add(now(), interval 1 day),'%Y_%m_%d')); ?這個部分為根據日期生成表名,然后concat.
prepare stmt from @create_sql; ? 其中 stmt ?為 prepare 的命名。
?
?
? ?
? ?
posted on 2015-03-17 17:47 4279 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/g4279/p/4345043.html
總結
以上是生活随笔為你收集整理的mysql event scheduler机制 与 动态表名创建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爱回收jd图标
- 下一篇: 数据库如何生成sql语句