一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是由于时间到了触发执行,而触发器是由于某件事件(增删改)触发执行;mysql
查看是否开启:sql
show variables like 'event_scheduler';
若是显示OFF,则输入如下语句开启:spa
set global event_scheduler = on;
提醒:虽然这里用set global event_scheduler = on语句开启了事件,可是每次重启电脑。或重启mysql服务后,会发现,事件自动关闭(event_scheduler=OFF),因此想让事件一直保持开启,最好修改配置文件,让mysql服务启动的时候开启时间,只须要在my.ini配置文件的[mysqld]部分加上event_scheduler=ON 便可,以下:code
首先、新建user表:blog
-- ---------------------------- -- 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;
而后、新建事件,有两种事件类型,一个是间隔触发,另外一个是特定事件触发。事件
参数说明:event
DEFINER:建立者;class
ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的状况下,删除事件(注意特定时间执行的事件,若是设置了该参数,执行完毕后,事件将被删除,不想删除的话能够设置成ON COMPLETION PRESERVE);test
ENABLE:表示系统将执行这个事件;配置
-- ---------------------------- -- Event structure for `event_minute` -- ---------------------------- DROP EVENT IF EXISTS `event_minute`; DELIMITER ;; CREATE DEFINER=`root`@`localhost` EVENT `event_minute` ON SCHEDULE EVERY 1 MINUTE STARTS '2016-01-17 14:49:43' ON COMPLETION NOT PRESERVE 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 ;
参数说明:
DEFINER:建立者;
ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的状况下,删除事件(注意特定时间执行的事件,若是设置了该参数,执行完毕后,事件将被删除,不想删除的话能够设置成ON COMPLETION PRESERVE);
ENABLE:表示系统将执行这个事件;
-- ---------------------------- -- Event structure for `event_at` -- ---------------------------- DROP EVENT IF EXISTS `event_at`; DELIMITER ;; CREATE DEFINER=`root`@`localhost` EVENT `event_at` ON SCHEDULE AT '2016-01-17 15:30:00' ON COMPLETION NOT PRESERVE ENABLE DO
BEGIN INSERT INTO USER(name, address,addtime) VALUES('AT','AT',now()); END ;; DELIMITER ;
查看结果,结果正确: