zoukankan      html  css  js  c++  java
  • mysql事件(event)

    【小结】简单案例

    SET GLOBAL event_scheduler=1
    delimiter $$
    create definer = current_user event `test`.`event_table1` on schedule every 5 second -- 每隔5秒中就向 `table1` 插入当前时间 on completion preserve enable comment '每隔5秒中就向 `table1` 插入当前时间的事件' do begin insert into `table1` values(null, now()); end$$ delimiter ; -- 引用自:https://blog.csdn.net/qq_34845394/article/details/90038250

    【0】正文
    MySQL中的事件(event)是用于执行定时或周期性的任务,类似Linux中的crontab,但是后者只能精确到分钟,事件可以精确到秒。

      既然MySQL自身能实现定时性任务,那么就不必在应用层实现了。事件由一个特定的线程来管理的,也就是所谓的事件调度器,但是事件不能直接调用。

      MySQL中调度器event_scheduler负责调用事件,也就是由全局变量event_scheduler的状态决定,它默认是OFF, 一般是OFF

    show variables like '%event_scheduler%';
    +-----------------+-------+
    | Variable_name | Value |
    +-----------------+-------+
    | event_scheduler | OFF |
    +-----------------+-------+

    打开的方法:SET GLOBAL event_scheduler=1,关闭当然就是赋值为0了。

    创建事件的语法:

    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 test.event_minute on schedule every 1 minute
    do insert into events_list values('event_now', now());

    从2017年的给定时间起,每过一年调用一次存储过程ClearHis(2):

    CREATE EVENT `e_ClearHis` ON SCHEDULE EVERY 1 YEAR STARTS '2017-03-07 02:00:00'
    ON COMPLETION PRESERVE ENABLE 
    DO call ClearHis(2);

    查看当前所在库的事件:

    show events;

    可以修改事件,不必删除再创建,例如修改第一个例子为30秒间隔:

    alter event test.event_minute
    on schedule 
    every 30 second 
    do insert into events_list values('event_now', now());



    修改上面例子为不活动和再次活动

    alter event test.event_second disable;
    alter event test.event_second enable;

    删除事件

    DROP EVENT [IF EXISTS] event_name

    ————————————————
    版权声明:本文为CSDN博主「SilentAssassin」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/yao5hed/article/details/81059864

  • 相关阅读:
    网安-04-DHCP部署与安全、DNS部署与安全
    网安-03-NTFS安全权限、文件共享服务器
    网安-02-批处理、病毒、用户与组管理、破解系统密码
    网安-01-IP详解及简单的DOS命令
    [异常笔记]required a bean of type 'org.quartz.JobExecutionContext' that could not be found
    [异常笔记]poi读取Excel异常
    CentOS7 minimal 没有netstat命令
    Docker运行Nginx服务器
    大数据开发从入门小白到删库跑路(一)- 获取Hadoop
    Docker 运行MangoDB
  • 原文地址:https://www.cnblogs.com/gered/p/11488279.html
Copyright © 2011-2022 走看看