Mysql中事件和定时任务

一、简介

事件(event)是MySQL在相应的时刻调用的过程式数据库对象。是MYSQL一个工具,一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。

二、创建语法  

CREATE 
    [DEFINER = { user | CURRENT_USER }] 
    EVENT 
    [IF NOT EXISTS] 
    event_name 
    ON SCHEDULE schedule 
    [ON COMPLETION [NOT] PRESERVE] 
    [ENABLE | DISABLE | DISABLE ON SLAVE] 
    [COMMENT 'comment'] 
    DO event_body; 
    
  schedule: 
    AT timestamp [+ INTERVAL interval] ... 
   | EVERY interval 
    [STARTS timestamp [+ INTERVAL interval] ...] 
    [ENDS timestamp [+ INTERVAL interval] ...] 
    
  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 :创建的event名字(唯一确定的)。
ON SCHEDULE:计划任务。
schedule: 决定event的执行时间和频率(注意时间一定要是将来的时间,过去的时间会出错),有两种形式 AT和EVERY。
[ON COMPLETION [NOT] PRESERVE]: 可选项,默认是ON COMPLETION NOT PRESERVE 即计划任务执行完毕后自动drop该事件;ON COMPLETION PRESERVE则不会drop掉。
[COMMENT 'comment'] :可选项,comment 用来描述event;相当注释,最大长度64个字节。
[ENABLE | DISABLE] :设定event的状态,默认ENABLE:表示系统尝试执行这个事件, DISABLE:关闭该事情,可以用alter修改
DO event_body: 需要执行的sql语句(可以是复合语句)。CREATE EVENT在存储过程中使用时合法的。

三、开启关闭事件调度器

1、查看是否开启

show variables like '%event_scheduler%';

默认是off,未开启

2、开启事件调度器

SET GLOBAL event_scheduler = ON; 
SET @@global.event_scheduler = ON; 
SET GLOBAL event_scheduler = 1; 
SET @@global.event_scheduler = 1;


或者通过配置文件 my.cnf

event_scheduler = 1 #或者ON
查看调度器线程:

show processlist; 


3、关闭事件调度器

SET GLOBAL event_scheduler = OFF; 
SET @@global.event_scheduler = OFF; 
SET GLOBAL event_scheduler = 0; 
SET @@global.event_scheduler = 0;


4、查看调度器线程任务

SELECT @@event_scheduler;
SHOW PROCESSLIST;
show events; #查看当前schemal 调度任务
select * from mysql.event;#查看整个数据库 调度任务
四、创建测试表

1、简单省略

2、创建事件1(立即启动事件)

create event event_now 
on schedule 
at now() 
do insert into events_list values('event_now', now());
3、创建事件2(每分钟启动事件)

create event test.event_minute 
on schedule 
every 1 minute 
do insert into events_list values('event_now', now());


4、创建事件3(每秒钟启动事件)

CREATE event event_now 
ON SCHEDULE 
EVERY 1 SECOND
DO INSERT INTO event_test VALUES(1);


5、创建事件4(每秒钟调用存储过程)

CREATE DEFINER=`root`@`localhost` EVENT `eventUpdateStatus` 
ON SCHEDULE EVERY 1 SECOND
STARTS '2017-11-21 00:12:44'
ON COMPLETION PRESERVE 
ENABLE 
DO call updateStatus()

6、创建事件每年4月1号凌晨4点执行

CREATE EVENT Crontab_UpdateTask

ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',4,'-',1)),INTERVAL 4 HOUR)

ON COMPLETION PRESERVE ENABLE

DO

BEGIN
update `user` set `passWord` = '66666';
END 


 

猜你喜欢

转载自blog.csdn.net/LookingTomorrow/article/details/126843581