一、前言
自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。
在使用这个功能之前必须确保event_scheduler已开启,可执行

SET GLOBAL event_scheduler = 1;
---或我们可以在配置my.cnf文件 中加上 event_scheduler = 1



SET GLOBAL event_scheduler = ON;

来开启,也可以直接在启动命令加上“--event_scheduler=1”,例如:

mysqld ... --event_scheduler=1

要查看当前是否已开启事件调度器,可执行如下SQL:

SHOW VARIABLES LIKE 'event_scheduler';



SELECT @@event_scheduler;



SHOW PROCESSLIST;

二、创建事件(CREATE EVENT)
先来看一下它的语法:

view sourceprint?
1 CREATE EVENT [IF NOT EXISTS] event_name?

2 ON SCHEDULE schedule?

3 [ON COMPLETION [NOT] PRESERVE]?

4 [ENABLE | DISABLE]?

5 [COMMENT 'comment']?

6 DO sql_statement;

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}

1) 首先来看一个简单的例子来演示每秒插入一条记录到数据表

view sourceprint?
1 USE test;?

2 CREATE TABLE aaa (timeline TIMESTAMP);?

3 CREATE EVENT e_test_insert?

4 ON SCHEDULE EVERY 1 SECOND

5 DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

等待3秒钟后,再执行查询看看:

mysql> SELECT * FROM aaa;
+---------------------+
| timeline |
+---------------------+
| 2007-07-18 20:44:26 |
| 2007-07-18 20:44:27 |
| 2007-07-18 20:44:28 |
+---------------------+

2) 5天后清空test表:

view sourceprint?
1 CREATE EVENT e_test?

2 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY

3 DO TRUNCATE TABLE test.aaa;

3) 2007年7月20日12点整清空test表:

view sourceprint?
1 CREATE EVENT e_test?

2 ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'

3 DO TRUNCATE TABLE test.aaa;

4) 每天定时清空test表:

view sourceprint?
1 CREATE EVENT e_test?

2 ON SCHEDULE EVERY 1 DAY

3 DO TRUNCATE TABLE test.aaa;

5) 5天后开启每天定时清空test表:

view sourceprint?
1 CREATE EVENT e_test?

2 ON SCHEDULE EVERY 1 DAY

3 STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY

4 DO TRUNCATE TABLE test.aaa;

6) 每天定时清空test表,5天后停止执行:

view sourceprint?
1 CREATE EVENT e_test?

2 ON SCHEDULE EVERY 1 DAY

3 ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY

4 DO TRUNCATE TABLE test.aaa;

7) 5天后开启每天定时清空test表,一个月后停止执行:

view sourceprint?
1 CREATE EVENT e_test?

2 ON SCHEDULE EVERY 1 DAY

3 STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY

4 ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH

5 DO TRUNCATE TABLE test.aaa;

[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):

view sourceprint?
1 CREATE EVENT e_test?

2 ON SCHEDULE EVERY 1 DAY

3 ON COMPLETION NOT PRESERVE?

4 DO TRUNCATE TABLE test.aaa;

[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT ‘comment’]可以给该事件加上注释。
三、修改事件(ALTER EVENT)

view sourceprint?
1 ALTER EVENT event_name?

2 [ON SCHEDULE schedule]?

3 [RENAME TO new_event_name]?

4 [ON COMPLETION [NOT] PRESERVE]?

5 [COMMENT 'comment']?

6 [ENABLE | DISABLE]?

7 [DO sql_statement]

1) 临时关闭事件

ALTER EVENT e_test DISABLE;

2) 开启事件

ALTER EVENT e_test ENABLE;

3) 将每天清空test表改为5天清空一次:

ALTER EVENT e_test
ON SCHEDULE EVERY 5 DAY;

四、删除事件(DROP EVENT)
语法很简单,如下所示:

DROP EVENT [IF EXISTS] event_name

例如删除前面创建的e_test事件

DROP EVENT e_test;

当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS

DROP EVENT IF EXISTS e_test;
注意:如果你将event执行了Alter event event_name disable.那么当你重新启动mysql服务
器后,该event将被删除(测试版本:5.1.30)

应用案例
本案例是利用 event scheduler 的特性,每秒钟调用一次存储过程,用于判断 SLAVE 是否正常运行,如果发现 SLAVE 关闭了,忽略 0 次错误,然后重新启动 SLAVE。

* 首先创建存储过程

view sourceprint?
01 delimiter //?

02 create procedure `Slave_Monitor`()?

create event[]的更多相关文章

  1. [SharePoint 2013] Create event receiver for external list

    Main list for creating event receiver for external list Subscribe   storage, it could be data table ...

  2. SQL Server 事件通知(Event notifications)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) 事件通知监控DDL(NotifyQue ...

  3. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  4. Event --mysql的scheduler.md

    事件调度器event 相当于oracle scheduler CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] even ...

  5. mysql数据库事件调度(Event)

    mysql中的事件调度器可以定时对数据库增加,删除和执行操作,相当于数据库中的临时触发器,与Linux系统中的执行计划任务一样,这样就可以大大降低工作量. 1.开启事件调度器 [root@node1 ...

  6. MySQL 定时器EVENT学习

    原文:http://blog.csdn.net/lifuxiangcaohui/article/details/6583535 MySQL 定时器EVENT学习 MySQL从5.1开始支持event功 ...

  7. 【MySQL】Event事件与游标

    MySQL的事件就像Linux系统上的定时任务,按照设置的时间或者间隔时间执行设置好的任务. 如果用SQLyog一类的写存储过程.触发器或者事件会省事一些,例如SQLyog就会生成一个大致的模板: D ...

  8. Rails学习:create操作 局部模板

    学习Ruby on Rails实战真经 里面说rails4使用了strong parameters, 所以代码这么写:注意不是Event.new(params[:event])了,而是参数是函数返回值 ...

  9. mysql定时脚本(event),类似oracle的job

    mysql定时脚本(event),类似oracle的job   我有2张表:tb_push_data 和 tb_push_data_log 现在需要每隔一段时间将tb_push_data 符合条件的 ...

随机推荐

  1. .net core中的那些常用的日志框架(NLog篇)

    前言 咱们上回讲到,.net core中内置的Logging日志框架的使用,以及浅显的讲解,接下来,给大家介绍一个第三方日志框架(NLog). NLog简介 NLog是适用于各种.NET平台(包括.N ...

  2. 远程IO

    远程io 远程io ZLAN6842,ZLAN6844是8路远程O控制器.含有8路DI.8路DO,8路AI输入.其中DI支持干节点和湿节点,带光耦隔离:DO为继电器输出,具有5A 250VAC或5A ...

  3. 对json数组按照id精确查询并修改值

    //json数组,里面有一个id等于5的,班级的标识和名称不是该班级,通过id把班级信息修改为指定的信息 var zNodes=[ { id:1, classid:1, className:" ...

  4. C 和 C++ 打起来了!曾今最亲密的伙伴到现今的不爽?

    70年代初,贝尔实验室创建了C语言,它是开发UNIX的副产品.很快C就成为了最受欢迎的编程语言之一.但是对于Bjarne Stroustrup来说,C的表达能力还不够.于是,他在1983年的博士论文中 ...

  5. js 实现 input file 文件上传

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  6. 干货分享:在Windows下使用Visual Studio搭建C语言开发环境

    前言:本文将教大家如何使用 VIsual Studio Code 搭建 C 语言开发环境,包括使用 VS Code 如何编译和调试 C 语言程序,需要 用到的工具有 Visual Studio Cod ...

  7. C# XML解析

    摘自:http://www.cnblogs.com/RiseSoft/archive/2012/03/17/2404007.html 之前在项目中处理的都是一些小数据量的XML文件,都是直接用.Net ...

  8. Linux入门到放弃之六《磁盘和文件系统管理一》

    要求:创建卷组名为 mail_store:逻辑卷名 mail,从卷组mail_store上划出50GB空间, 使用mkfs命令创建ext3文件系统,并实现开机自动挂载,挂载点/mailbox: (1) ...

  9. Spring之IOC/DI(反转控制/依赖注入)_入门Demo

    在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new ob ...

  10. Window Mysql 解压安装

    下载MySQL zip文件 解压后没有data文件夹和my.ini文件, 在根目录下创建my.ini文件,输入如下内容 以管理员身份运行cmd ,进入bin目录 ,运行下列命令,即可. a) mysq ...