zoukankan      html  css  js  c++  java
  • mysql 事件(Event) 总结

    1 事件简介

        事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。

        事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。

        事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。

    2 事件的优缺点
        2.1 优点

        一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。

        可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。

        2.2 缺点
        定时触发,不可以调用。

    3 创建事件

        一条create event语句创建一个事件。每个事件由两个主要部分组成,第一部分是事件调度(event schedule),表示事件何时启动以及按什么频率启动,第二部分是事件动作(event action ),这是事件启动时执行的代码,事件的动作包含一条SQL语句,它可能是一个简单地insert或者update语句,也可以使一个存储过程或者benin...end语句块,这两种情况允许我们执行多条SQL。

        一个事件可以是活动(打开)的或停止(关闭)的,活动意味着事件调度器检查事件动作是否必须调用,停止意味着事件的声明存储在目录中,但调度器不会检查它是否应该调用。在一个事件创建之后,它立即变为活动的,一个活动的事件可以执行一次或者多次。

    4 创建事件的语法

    循环执行事件

    CREATE DEFINER=`root`@`localhost` //用户
    EVENT `test` //事件的名称
    ON SCHEDULE EVERY 60 MINUTE_SECOND //60秒循环一次   SCHEDULE EVERY '0:0:1' HOUR_SECOND    SCHEDULE EVERY '0:1' HOUR_MINUTE  (不同的计时方式)
    STARTS '2017-11-01 00:00:00.000000' ENDS '2017-11-30 00:00:00.000000' // 开始时间,结束时间
    ON COMPLETION PRESERVE ENABLE //过期后禁用事件而不删除
    DO 
    BEGIN //执行的内容
    insert into events_list values('event_now', now());
    insert into events_list values('event_now1', now()); 
    END
    

    执行多条sql语句时,用用begin...end包起来

    只执行一次

    CREATE DEFINER=`root`@`localhost` 
    EVENT `test2` 
    ON SCHEDULE AT '2017-11-17 00:00:00.000000' // 只执行一次 
    ON COMPLETION PRESERVE ENABLE 
    DO insert into events_list values('event_now', now());
    

     

    phpmyadmin中可以直接创建事件

    开启关闭事件调度器

    show variables like '%event_scheduler%';

    通过命令行

    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;

    mysql> show processlist;  
    +----+-----------------+-----------+------+---------+------+------------------------+------------------+  
    | Id | User            | Host      | db   | Command | Time | State                  | Info             |  
    +----+-----------------+-----------+------+---------+------+------------------------+------------------+  
    |  2 | root            | localhost | NULL | Query   |    0 | NULL                   | show processlist |  
    |  3 | event_scheduler | localhost | NULL | Daemon  |    6 | Waiting on empty queue | NULL             |  
    +----+-----------------+-----------+------+---------+------+------------------------+----------------
    

      event_scheduler 线程执行中

  • 相关阅读:
    用JavaScript实现div的鼠标拖拽效果
    JavaScript插件制作-tab选项卡
    javascript插件制作学习-制作步骤
    JavaScript实现页面滚动到div区域div以动画方式出现
    RabbitMQ生产者消费者
    基于TCP/IP协议的socket通讯client
    基于TCP/IP协议的socket通讯server
    MQTT 发布者订阅者
    linux实用命令
    RabbitMQ CentOS6.5 安装
  • 原文地址:https://www.cnblogs.com/microtiger/p/7818468.html
Copyright © 2011-2022 走看看