mysql 定时任务的使用

mysql5.1.6增加了一个事件调度器(Event Scheduler),可以做定时任务(定时删除记录,定时数据统计),取代之前系统的计划任务。mysql事件调度器可以精确到每秒执行一个任务。

事件调度器与触发器的区别:事件调度器是基于特定时间周期来触发执行某些任务,触发器是基于某个表产生的事件来触发。

一、查看是否开启

> show variables like ‘event_scheduler‘;

二、开启事件调度器

set global event_scheduler = on;

这里的设置,当mysql重启后,又会自动关闭。如果需要一直开启,需要在my.ini中配置如下:

event_scheduler = on

三、创建事件语法

CREATE EVENT [IF NOT EXISTS ] event_name
ON SCHEDULE schedule
[ ON COMPLETION [ NOT ] PRESERVE ]
[ ENABLE | DISABLE ]
[ COMMENT ‘注释‘ ]
DO SQL语句;

schedule : AT TIMESTAMP [+ INTERVAL interval ] | EVERY interval [ STARTS TIMESTAMP ] [ ENDS TIMESTAMP ]
interval : quantity { YEAR | QUARTER | MONTH | DAY |
                      HOUR | MINUTE | WEEK | SECOND |
                      YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND |
                      HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND }

event_name:事件名,最大长度64个字符。

schedule:执行时间。

[ ON COMPLETION [ NOT ] PRESERVE ] :事件是否需要复用。

[ ENABLE | DISABLE ] :事件开启或关闭。

四、关闭事件

ALTER EVENT event_name DISABLE;

五、开启事件

ALTER EVENT event_name ENABLE;

六、删除事件

DROP EVENT [IF EXISTS ] event_name;

七、查看所有事件

SHOW EVENTS; 

八、事件例子

我们先创建一个简单的test表用于测试

CREATE TABLE `test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘ID‘,
  `now` datetime DEFAULT NULL COMMENT ‘时间‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

事件类型有两种,一种是间隔触发,一种是特定时间触发

我们每隔一秒向test表插入一条记录:

DROP EVENT IF EXISTS event_test;
CREATE EVENT event_test
ON SCHEDULE EVERY 1 SECOND STARTS ‘2017-08-22 11:57:00‘ ENDS ‘2017-08-22 12:00:00‘
ON COMPLETION PRESERVE
ENABLE
COMMENT ‘每隔一秒向test表插入记录‘
DO INSERT INTO test VALUES(NULL, now());

我们指定时间来向test表插入一条记录:

DROP EVENT IF EXISTS event_test2;
CREATE EVENT event_test2
ON SCHEDULE AT ‘2017-08-22 12:01:00‘
ON COMPLETION PRESERVE
ENABLE
COMMENT ‘指定时间向test表插入记录‘
DO INSERT INTO test VALUES(999999, now());

时间: 2024-11-29 08:20:12

mysql 定时任务的使用的相关文章

MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)

MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据) 分类: MySql5.x2014-06-23 15:16 1266人阅读 评论(0) 收藏 举报 mysql数据库 [sql] view plaincopy <span style="font-family: 'Microsoft YaHei'; font-size: 14px;">MySQL定时任务event</span> 由于一些业务需求,我们可能需要定时清除数据库一些废弃的数据

mysql 定时任务和存储过程

mysql 定时任务和存储过程 最近在做日志系统,中间用到了 mysql, 其中有一个要求: 把数据库中 7天之后的日志清除了.看到 mysql 也支持 定时任务.于是就用 mysql 来做了.下面就是这次使用代码. 存储过程 use webapm; --创建存储过程 DELIMITER $$ CREATE PROCEDURE `p_del_slow`(IN `date_inter` INT) BEGIN DELETE FROM slow_duration WHERE (TO_DAYS(NOW(

Mysql定时任务详情

Mysql定时任务 1.查看是否开启事件调度器: SHOW VARIABLES LIKE 'event_scheduler'; #没有开启则无法启用定时器(0代表:off,1代表:on)#若未开启则执行SET GLOBAL event_scheduler = ON; #开启定时器 2.创建EVENT事件语法: #例.每隔10秒执行一次 CREATE EVENT 定时器名称 #event事件名 ON SCHEDULE EVERY 10 SECODE #每隔10秒调度一次(事件可以自行设置[例:MO

mysql定时任务简单例子

? 1 2 3 4 5 6 7 8 9     如果要每30秒执行以下语句: [sql] update userinfo set endtime = now() WHERE id = '110';  可以给mysql建个定时任务,具体方法如下: [sql] delimiter //   /* 设定语句终结符为 //,因存储过程语句用;结束 */ 一.查看event是否开启 ? 1 2 3 4 5 [sql] show variables like '%sche%';  开启event_sched

mysql定时任务配置

做项目有时会遇到一些状态需要每天定时去维护,我的方案是写成sql语句或者存储过程,再配置mysql调度器让数据库每天去执行.废话不多说,直接进去正文: 假如当前时间是2016-12-28 12:05:00,你执行下面语句,等到12:10时,系统自动执行调度任务去往aaa表里insert一条记录. Select @@event_scheduler;#查看事件调度程序,如果是OFF,则执行下条语句SET GLOBAL event_scheduler = ON;#设置时间调度程序为ON#每天的2016

MYSQL 定时任务

设置定时任务时,首先将event_scheduler设置为1,以开启事件计划功能. 1.开启功能----------------------------------------执行命令 set global event_scheduler=1; select @@event_scheduler;----------------------------------------OR -----------------------------------------------------------

mysql定时任务用到存储过程和定时任务

需求: 需要将t_app_message中的消息(将要被发送的消息)给每一个学生发送一遍,并且在发送完成后,将消息置为已发送状态已发送状态. 一言不合上代码 1 /*删除存储过程*/ 2 drop procedure if exists proc_sendAllMsg; 3 /*创建存储过程*/ 4 CREATE PROCEDURE proc_sendAllMsg() 5 BEGIN 6 /*先插入*/ 7 INSERT t_base_message (sid,mid) 8 SELECT a.i

mysql定时任务event——清理过期数据 (转)

1.查询是否开启事件调度 SHOW VARIABLES LIKE 'event_scheduler'; 2.开启事件调度 临时: SET GLOBAL event_scheduler = 1; 永久: vim /etc/my.cnf event_scheduler=ON [mysqld]event_scheduler=ON //这一行加入mysqld标签下 3.创建p_del_count存储过程. 接收传入参数30并执行删除数据操作,删除大于30天的数据. drop procedure if e

mysql定时任务按天建表并跨库同步数据

创建定时任务完成:创建ASR识别记录表,每天自动从小云AI对话详情表同步数据.*/DROP PROCEDURE IF EXISTS `create_o_asr_record_call`;DELIMITER ;;CREATE PROCEDURE `create_o_asr_record_call`(IN `dayInt` bigint,out result int) COMMENT 'ASR识别结果表--按日--建表'BEGIN set @sql_tmp3 = CONCAT('create tab