`
liangjian103
  • 浏览: 176931 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 事件处理(定时触发某个任务或存储过程等)

阅读更多

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

创建事件(CREATE EVENT)
先来看一下它的语法:CREATE EVENT [IF NOT EXISTS] event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE]
    [COMMENT 'comment']
    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) 首先来看一个简单的例子来演示每秒插入一条记录到数据表USE test;
CREATE TABLE aaa (timeline TIMESTAMP);
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 1 SECOND
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表:CREATE EVENT e_test
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
3) 2007年7月20日12点整清空test表:CREATE EVENT e_test
ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
DO TRUNCATE TABLE test.aaa;
4) 每天定时清空test表:CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
DO TRUNCATE TABLE test.aaa;
5) 5天后开启每天定时清空test表:CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
6) 每天定时清空test表,5天后停止执行:CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
7) 5天后开启每天定时清空test表,一个月后停止执行:CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO TRUNCATE TABLE test.aaa;
[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;
[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT ‘comment’]可以给该事件加上注释。


三、修改事件(ALTER EVENT)
ALTER EVENT event_name
    [ON SCHEDULE schedule]
    [RENAME TO new_event_name]
    [ON COMPLETION [NOT] PRESERVE]
    [COMMENT 'comment']
    [ENABLE | DISABLE]
    [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;

附:如需规定每天几点执行mysql 请见下例

CREATE EVENT myevent
    -> ON SCHEDULE EVERY 1 DAY STARTS '2009-10-24 02:00:00'
    -> DO
    -> delete from t where ptime <date_sub(curdate(),interval 3 day);

 

 

/*创建定时处理的事件--用户每天将gps上报数据 通过存储过程autogpsinfo_TurnStore 记录到相应的数据表*/
 CREATE event gpsinfo_TurnStore
   ON SCHEDULE EVERY 1 DAY STARTS '2011-01-10 04:00:00'
 DO
  CALL autogpsinfo_TurnStore;
 
 
 还有个地方需要注意的,如果是第一次用的话,可能出现不执行的情况,不是代码写错了。是因为需要先打开事件调度器

/*使用系统变量event_scheduler来打开事件调度器,true为打开,false为关闭*/
SET GLOBAL event_scheduler=TRUE

执行了这句代码之后就OK了

分享到:
评论

相关推荐

    mysql计划任务教程.zip_mysql下载完是个压缩包

    这篇文章可能详述了设置MySQL定时任务的具体步骤,包括如何使用CREATE EVENT语句创建事件,以及如何使用ALTER EVENT或DROP EVENT修改或删除已存在的任务。 “mysql计划任务每天定时执行.url”则可能是一个指导如何...

    spring+quartz动态定时任务创建 +mybatis

    当结合Quartz,一个强大的任务调度库,我们可以实现动态的定时任务创建,这在业务逻辑中有着广泛的应用,如数据同步、定时报表生成等。 **Spring框架** Spring框架是Java开发者必备的工具之一。它提供了一个统一的...

    mysql定时任务(event事件)实现详解

    MySQL中的定时任务,通常指的是Event事件,它是一种内置的机制,允许用户在特定时间或周期性地执行SQL语句或存储过程,而无需依赖操作系统级别的计划任务。Event事件的引入,使得数据库自身就能处理定时任务,提高了...

    mysql数据库定时备份手册

    ### MySQL数据库定时备份知识点 #### 一、MySQL数据库备份的重要性 在现代企业的信息化管理中,数据的安全性至关重要。定期对MySQL数据库进行备份是一项基础而重要的维护工作,它可以帮助企业防止因硬件故障、软件...

    Flink实时读取Kafka数据批量聚合(定时按数量)写入Mysql.rar

    这两种策略可以灵活组合,以满足不同业务需求,比如在处理实时交易数据时,可能更倾向于按数量触发,而在分析用户行为时,定时触发可能更为合适。 **数据写入MySQL** 在聚合操作完成后,Flink可以使用`...

    spring-boot 定时任务集群

    本篇文章将深入探讨如何在Spring Boot 2.1.6版本中配置和管理定时任务,并实现任务的集群部署以及任务的持久化存储到MySQL数据库。 **一、Spring Boot定时任务** 1. **@Scheduled注解**:Spring Boot提供了对定时...

    基于Workerman+MySQL的接口化秒级定时任务管理.zip

    在本系统中,MySQL用于存储定时任务的相关信息,如任务ID、任务名称、执行频率、上次执行时间、下次执行时间等,使得任务调度有据可依,同时方便对任务进行增删改查等操作。 接口化设计是这个系统的一大亮点,它...

    在数据库中实现定时任务-详解及实例.pdf

    MySQL通过“事件调度器”(Event Scheduler)功能支持定时任务。默认情况下,此功能可能处于关闭状态,需要手动开启。 - **查询事件调度器状态**:在MySQL命令行中执行以下命令查询事件调度器的状态: ```sql SHOW...

    mysql数据库定时备份,按时间存放sql文件

    以上就是关于"mysql数据库定时备份,按时间存放sql文件"的详细说明,包括如何创建SQL备份文件,设置批处理脚本,以及使用Windows计划任务自动化备份过程,以及恢复数据的方法。这种备份策略能有效地保护数据安全,...

    maven+springboot+myBatis+quartz+mysql+Layui动态页面管理quartz定时任务(有sql文件)

    在这个项目中,Quartz被用来实现动态管理的定时任务,例如周期性的数据处理或服务调用。 5. **MySQL**:MySQL是一种流行的关系型数据库管理系统,广泛用于存储和处理项目中的结构化数据。在这里,MySQL作为后端...

    qt mysql定时备份

    QT MySQL 定时备份是将MySQL数据库的数据在特定时间点自动保存到本地或者远程服务器的过程,这通常通过编程实现,而QT作为一个强大的跨平台应用程序开发框架,提供了与MySQL数据库交互的API,使得我们可以利用QT来...

    shell脚本定时执行logstash任务异常mail465发邮件.rar

    结合这些元素,我们可以推测这个压缩包中的内容可能包括一个shell脚本文件,该脚本监控Logstash的日志,使用MySQL作为数据源或目标,通过Elasticsearch进行数据处理,当Logstash出现问题时,利用mail465通过SMTP发送...

    window定时工具,可以定时备份数据库,定时提醒等!

    通过它,你可以设置任意时间或基于特定事件触发的应用程序、脚本或者批处理文件的运行。要创建定时备份数据库的任务,你需要遵循以下步骤: 1. 打开“控制面板”或搜索“任务计划程序”并启动。 2. 在右侧窗格中...

    Quartz定时任务持久化数据表

    总的来说,Quartz通过将任务和触发器的配置持久化到数据库,提供了强大的任务管理和监控能力,使得在复杂的企业级应用中能够灵活地处理定时任务。"quartz.sql"文件的使用,可以简化设置和维护过程,让开发者专注于...

    MySQL Event Scheduler(事件调度器)

    事件调度器是定时触发执行的,在这个角度上也可以称作是”临时的触发器”。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也...

    存储过程Demo.zip

    本资料“存储过程Demo.zip”提供了一个完整的存储过程示例,同时涉及到事件触发机制,这对于理解和应用MySQL存储过程至关重要。 1. **存储过程的基本概念**: 存储过程是数据库中存储的一组预编译的SQL语句,可以...

    quartz整合springbatch定时集群实现mysql参考模版

    同时,SpringBatch可以利用MySQL存储批量处理的状态,便于在处理过程中或处理失败后进行恢复。 **模版的使用** 这个参考模版包含了完成上述整合所需的全部代码和配置。导入到常用的IDE(如Eclipse或IntelliJ IDEA)...

    集群定时任务

    在“数据库mysql”这部分,说明了我们的任务调度信息将存储在MySQL数据库中。Quartz需要一张特定的数据库表来存储其状态信息,例如qrtz_triggers、qrtz_job_details等。这些表的创建通常通过Quartz提供的SQL脚本来...

    转:spring多个定时任务quartz配置

    此外,还可以利用Spring的AOP和事件机制,对任务执行过程进行监控和处理。 总之,Spring与Quartz的整合提供了灵活且强大的定时任务解决方案,适用于各种复杂的调度需求。正确配置和使用,能够帮助我们构建高效、...

    job调用的存储过程

    存储过程的调用可能是为了执行特定的数据处理任务,如数据聚合、数据清洗、业务逻辑处理等。 结合提供的压缩包子文件名称,我们可以推测这些文件可能是记录了不同时间粒度的数据,如`hour.txt`可能包含每小时的数据...

Global site tag (gtag.js) - Google Analytics