zoukankan      html  css  js  c++  java
  • 006.mysql-mysql事件event的创建、开启、定时调度

    1.查看事件调度是否开启,on表示开启

    show variables like 'event_scheduler';

    select @@event_scheduler;

     2.开启、关闭事件调度器

    set global event_scheduler = ON ;

    set global event_scheduler = OFF;

    注意:上面的设置方式,mysql重启后会回到原来的状态。如果永久开启调度器,需要在my.ini中添加

      event_scheduler=on

      重启服务器生效

    3.创建事件

    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;                执行代码(sql存储过程egin  end多条语句事件)
    on schedule 定时语句
    AT timestamp [+ INTERVAL interval] ...
      | EVERY interval 
        [STARTS timestamp [+ INTERVAL interval] ...]
        [ENDS timestamp [+ 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}

     

    interval 间隔

    每分钟
    ON
    SCHEDULE EVERY '1' MINUTE STARTS '2020-09-02 15:35:49' ENDS '2020-09-02 16:00:49'

    每天凌晨一点
    ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)

    每个月 的第一天凌晨1点执行
    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 SCHEDULE EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK

    每12小时 从现在起30分钟后开始 四个星期后结束
    ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK

    补充:mysql日期函数

    现在日期
    select CURDATE()
    2020-09-03
    距离月初相差多少天
    select DAY(CURDATE())-1
    2
    日期减去间隔时间
    select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY)
    2020-09-01
    日期增加间隔时间
    select DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
    2020-09-04 01:00:00

    案例:

    1.创建表

    CREATE TABLE `tb_user` (
    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
    `name` varchar(30) NOT NULL COMMENT '用户姓名',
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=223 DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
    
    CREATE TABLE `tb_total` (
    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
    `userNumber` int(10) NOT NULL COMMENT '汇总',
    `createtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1093 DEFAULT CHARSET=utf8mb4 COMMENT='用户信息汇总表';

    创建存储过程

    CREATE DEFINER=`root`@`localhost` PROCEDURE `p_total`()
    BEGIN
        DECLARE n_total INT default 0;
        SELECT COUNT(*) INTO n_total FROM test.tb_user;
        INSERT INTO tb_total (userNumber,createtime) VALUES(n_total,NOW());
    END

    创建事件

    事件1   每5s执行一次
    --
    创建事件 CREATE EVENT IF NOT EXISTS event_user ON SCHEDULE EVERY 5 SECOND ON COMPLETION PRESERVE COMMENT '新增用户信息定时任务' DO INSERT INTO tb_user(name,create_time) VALUES('pan_junbiao的博客',NOW());

    事件2 汇总 每天凌晨一点

    CREATE EVENT IF NOT EXISTS e_autoTotal
    ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
    ON COMPLETION PRESERVE ENABLE
    DO CALL p_total();

    查询事件

    SELECT * FROM information_schema.events; 

    启动事件

    ALTER EVENT event_user ENABLE;

    关闭事件

    ALTER EVENT event_user DISABLE;

    删除事件

    DROP EVENT IF EXISTS event_user;

    修改事件

    ALTER
        [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;


    -- 修改事件 调度内容
    ALTER EVENT `event_proc`
    DO begin

    call test.p_total();
    call test.proc_event_proc();

    end;

  • 相关阅读:
    markdown 常用语法
    markdown 转 pdf 方法
    git call failed: [git clone Could not resolve host: git.openstack.org
    从VirtualBox虚拟主机访问NAT客户机的方法
    MVC,MVP 和 MVVM 的图示
    url转义
    Python如何输出包含在对象中的中文字符?
    OpenGL
    AutoHotKey使用:空格键坏了怎么办?
    三联书社推荐好书100本
  • 原文地址:https://www.cnblogs.com/star521/p/13606552.html
Copyright © 2011-2022 走看看