【MySQL】玩轉定時器
阿新 • • 發佈:2017-11-28
color res .com tle isa 服務器 primary ima glob
1、前置條件,你需要將服務器和mysql的時間都設置成東八區,php.ini和my.cnf配置(參考上篇文章)
2、進入mysql客戶端,推薦Navicat for mysql
3、首先查看是否開啟了定時器的功能:
####調試MYSQL定時器 --時間設置正確情況下執行下面沒影響 xzz1128 ##### set time_zone = ‘+8:00‘; SHOW VARIABLES LIKE ‘event_scheduler‘;##查看是否開啟了event定時器功能 set GLOBAL event_scheduler = 1; //開啟 select NOW();
4、提醒:雖然這裏用set global event_scheduler = on語句開啟了事件,但是每次重啟電腦。或重啟mysql服務後 ,會發現,事件自動關閉(event_scheduler=OFF),所以想讓事件一直保持開啟,最好修改配置文件,讓mysql服務啟動的時候開啟時間,只需要在my.cnf配置文件的[mysqld]部分加上event_scheduler=ON 即可,如下:
5、首先、新建user表:
-- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(200) NOT NULL, `address` varchar(500) NOT NULL, `addtime` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然後、新建事件,有兩種事件類型,一個是間隔觸發,另一個是特定事件觸發。
6、下面代碼中分別介紹了定時器執行持續性動作(每個時間點需要幹的)和一次性動作(只用一次,用完即甩)
################# mysql持續性定時器 -xzz 1128 ########################## DROP EVENT IF EXISTS `event_minute`; DELIMITER ;; CREATE DEFINER=`root`@`localhost` EVENT `event_minute` ON SCHEDULE EVERY 1 MINUTE STARTS ‘2017-11-28 15:26:00‘ ON COMPLETION PRESERVE#當這個事件不會再發生的時候不會被Drop掉 ENABLE DO BEGIN INSERT INTO `user`(name, address,addtime) VALUES(‘test1‘,‘test1‘,now()); INSERT INTO `user`(name, address,addtime) VALUES(‘test2‘,‘test2‘,now()); END ;; DELIMITER ; ##################mysql一次性定時器################################# DROP EVENT IF EXISTS `event_at`; DELIMITER ;; CREATE DEFINER=`root`@`localhost` EVENT `event_at` ON SCHEDULE AT ‘2017-11-28 15:39:00‘ ON COMPLETION NOT PRESERVE #當這個事件不會再發生的時候會被Drop掉 ENABLE DO BEGIN INSERT INTO `user`(name, address,addtime) VALUES(‘AT‘,‘AT‘,now()); END ;; DELIMITER ;
7、其他比較重要的操作語句
###關閉\打開定時器 ALTER EVENT event_minute DISABLE; ALTER EVENT event_minute ENABLE; ###查詢定時器狀態 select * from mysql.event ;
8、看看效果:
8、感謝:
@Author 風一樣的碼農
@HomePageUrl http://www.cnblogs.com/chenpi/
【MySQL】玩轉定時器