爱程序网

【数据库】Mysql 中的事件//定时任务

来源: 阅读:

一、什么是事件

一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行;

二、开启事件

查看是否开启:

show variables like 'event_scheduler';

如果显示OFF,则输入以下语句开启:

set global event_scheduler = on;

提醒:虽然这里用set global event_scheduler = on语句开启了事件,但是每次重启电脑。或重启mysql服务后,会发现,事件自动关闭(event_scheduler=OFF),所以想让事件一直保持开启,最好修改配置文件,让mysql服务启动的时候开启时间,只需要在my.ini配置文件的[mysqld]部分加上event_scheduler=ON 即可,如下:

三、自定义简单的事件

新建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;

新建一个事件,每隔一分钟插入一条数据:

参数说明:

DEFINER:创建者;

ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件,如果设置了该参数,执行完毕后,事件将被删除,不想删除的话可以设置成ON COMPLETION PRESERVE);

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 ;

新建一个事件,特定时间2016-01-17 15:30:00插入一条数据

-- ------------------------------ 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 ;

查看结果,结果正确:

links

Mysql 中的事件//定时任务

Mysql中的函数

Mysql中的存储过程

Mysql中的视图

Mysql中的触发器

 

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助