MySQL 事件的学习

事件的基本概念

用于事件触发,通过单独或调用存储过程使用,在某一特定的时间点,触发相关的sql语句或存储过程。

事件的适用范围

对于每隔一段时间就有固定需求的操作。

基本语法

查看是否开启定时器

SHOW VARIABLES LIKE 'event_scheduler';

开启定时器

SET GLOBAL event_scheduler = 1; 

创建事件

REATE EVENT [IF NOT EXISTS] event_name

ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;

注释:

[enent_name]

事件的名称,最好让事件的名称具有描述整个事件的能力

[ON SCHEDULE] 计划任务,有两种设定计划任务的方式

1.AT  时间戳,用来完成单次的计划任务

2.EVERY  时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务。

在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。

在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式,时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。

 [ON COMPLETION [NOT] PRESERVE]

ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。

[ENABLE | DISABLE]

参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。

[COMMENT 'comment']

注释会出现在元数据中,它存储在information_schema表的COMMENT列,最大长度为64个字节。'comment'表示将注释内容放在单引号之间,建议使用注释以表达更全面的信息。

 DO sql_statement
DO sql_statement字段表示该event需要执行的SQL语句或存储过程。这里的SQL语句可以是复合语句,如:

EGIN
CREATE TABLE test1;
DROP TABLE test2;
CALL proc_test1();
END

删除事件

drop event event_name;
修改事件

LTER EVENT event_name

ON SCHEDULE schedule

[RENAME TO new_event_name]

[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement
事件的常用示例

两天后清空test表

CREATE EVENT e_test

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY
DO TRUNCATE TABLE test.aaa;
2017年02月26日12点整清空test表
CREATE EVENT e_test
ON SCHEDULE AT TIMESTAMP '2017-02-26 12:00:00'
DO TRUNCATE TABLE test.aaa;
每天定时清空test表
CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
DO TRUNCATE TABLE test.aaa;
两天后开启每天定时清空test表

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 2 DAY
DO TRUNCATE TABLE test.aaa;
每天定时清空test表,3天后停止执行

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 3 DAY
DO TRUNCATE TABLE test.aaa;
3天后开启每天定时清空test表,一个月后停止执行

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 3 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO TRUNCATE TABLE test.aaa;
[ON COMPLETION [NOT] PRESERVE] 
每天定时清空test表(只执行一次,任务完成后就终止该事件)

CREATE EVENT t_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;
[ENABLE | DISABLE]
[COMMENT ‘comment']
从现在开始每隔3天定时执行

CREATE EVENT EVENT1 
ON SCHEDULE EVERY 3 DAY STARTS NOW() 
ON COMPLETION PRESERVE ENABLE 
DO 
  BEGIN
    CALL test(); 
  END


每个月的凌晨1点执行

CREATE EVENT EVENT2   
ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR) 
ON COMPLETION PRESERVE ENABLE 
DO 
  BEGIN
    CALL test(); 
  END

每个季度一号的凌晨一点执行

CREATE EVENT TOTAL_SEASON_EVENT 
ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR) 
ON COMPLETION PRESERVE ENABLE 
DO 
  BEGIN
    CALL SEASON_STAT(); 
  END

每年1月1号凌晨1点执行

CREATE EVENT TOTAL_YEAR_EVENT 
ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 1 HOUR) 
ON COMPLETION PRESERVE ENABLE 
DO 
  BEGIN
    CALL YEAR_STAT(); 
  END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值