• 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、开启事件调度器

    1. SET GLOBAL event_scheduler = ON;
    2. SET @@global.event_scheduler = ON;
    3. SET GLOBAL event_scheduler = 1;
    4. SET @@global.event_scheduler = 1;

    或者通过配置文件 my.cnf

    event_scheduler = 1 #或者ON

    查看调度器线程:

    show processlist; 

    3、关闭事件调度器

    1. SET GLOBAL event_scheduler = OFF;
    2. SET @@global.event_scheduler = OFF;
    3. SET GLOBAL event_scheduler = 0;
    4. SET @@global.event_scheduler = 0;

    4、查看调度器线程任务

    1. SELECT @@event_scheduler;
    2. SHOW PROCESSLIST;
    3. show events; #查看当前schemal 调度任务
    4. select * from mysql.event;#查看整个数据库 调度任务

    四、创建测试表

    1、简单省略

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

    1. create event event_now
    2. on schedule
    3. at now()
    4. do insert into events_list values('event_now', now());

    3、创建事件2(每分钟启动事件)

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

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

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

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

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

  • 相关阅读:
    苹果电脑提高工作效率alfred 5中文
    不改平面不加层,微调走线抬电平
    HTTP超文本传输协议详解
    独一无二:探索单例模式的现代化创造之道
    LinuxC/C++ 实现HTTP Request
    HIVE伪分布安装
    Dubbo 框架搭建一个passport案例
    ZZCMS201910审计入门和SQL注入
    linux系统安全及应用
    mysql 到底是 join性能好,还是in一下更快呢
  • 原文地址:https://blog.csdn.net/qq_36602951/article/details/126234802