一、什么是mysql定时任务(事件)?
一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行;
二、如何开启mysql定时任务(事件)?
1、查看mysql定时任务当前状态是ON还是OFF:
sql命令:
- show variables like 'event_scheduler'
结果如下:
event_scheduler=OFF:代表未开启;ON代表开启;
2、开启mysql定时任务
sql命令:
- set global event_scheduler = on
三、创建mysql定时任务(事件):实例
1、新建一张user表
sql命令:
- 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;
2、新建mysql定时任务(新建事件)
注意:mysql事件有两种事件类型,一个是间隔触发,另一个是特定事件触发。
类型一:每隔一分钟插入一条数据:
参数说明:
DEFINER:创建者;
ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件,如果设置了该参数,执行完毕后,事件将被删除,不想删除的话可以设置成ON COMPLETION PRESERVE);
ENABLE:表示系统将执行这个事件;
sql命令:
- DROP EVENT IF EXISTS `event_minute`;
- DELIMITER ;;
- CREATE DEFINER=`root`@`localhost` EVENT `event_minute` ON SCHEDULE EVERY 1 MINUTE STARTS '2017-07-20 16:00: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 ;
类型二:特定时间插入一条数据,如2017-07-20 16:05:00
参数说明:
DEFINER:创建者;
ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件,如果设置了该参数,执行完毕后,事件将被删除,不想删除的话可以设置成ON COMPLETION PRESERVE);
ENABLE:表示系统将执行这个事件;
sql命令:
- DROP EVENT IF EXISTS `event_at`;
- DELIMITER ;;
- CREATE DEFINER=`root`@`localhost` EVENT `event_at` ON SCHEDULE AT '2017-07-20 16:05:00' ON COMPLETION NOT PRESERVE ENABLE DO
- BEGIN
- INSERT INTO USER(name, address,addtime) VALUES('AT','AT',now());
- END
- ;;
- DELIMITER ;
两种数据插入结果如下图:
四、查看mysql定时任务(事件)计划方法
我如何能知道我有哪些mysql定时任务计划?我要计划了定时任务10个、100个、甚至千个又应该如何全部列出来?
sql命令、方法一:
- SHOW EVENTS
结果如下:
sql命令、方法二:
- select * from mysql.event
结果如下:
五、删除mysql定时任务(事件)计划方法
如果我已经设置了很多的mysql定里任务计划,我想删除某个mysql定时任务又应该怎么办?
sql命令:
- drop EVENT event_minute
注意:event_minute是你创建定时任务计划的名字;删除mysql定时计划最好是结合上面的方法;
而且,上面“查看mysql定时任务计划列表”的时候也可以直接通过phpmyadmin来删除;
2017年12月27日 22:38:21 沙发
mysql 定时任务是通过获取系统时间还是计时的方式?
2017年12月27日 22:55:19 1层
@飞龙在天 服务器系统时间!
2017年12月26日 22:01:58 板凳
怎么通过xshell查看mysql定时任务?
2017年12月26日 22:37:52 1层
@害我将将将 文章不是发了mysql查看定时任务命令吗?你进入xshell也是一样,首先要用xshell登陆mysql后台对吧!(xshell下怎么启动mysql后台,怎么登陆?这个你应该懂吧!)再运行查看mysql定时任务命令就可以了!
2017年12月26日 13:09:19 地板
“mysql定时任务触发后台消息提醒”可以吗?
2017年12月26日 13:34:23 1层
@湮灭 你这不就是mysql定时器+触发器吗?把触发器的语法写入到mysql定时器sql中就好了,自己去思考一下,原理是这样的。
2017年12月25日 22:39:17 4楼
mysql的定时器如何调用触发器?
2017年12月26日 12:46:48 1层
@天平 你知道 mysql 触发器的语法吧!在定时器sql中写触发器语法就行了!
2017年07月22日 15:58:03 5楼
Mysql还有这功能?我都不知道,一直以为只有liunx有定时功能
2017年07月20日 23:39:27 6楼
讲解的很全面,感谢博主!