mysql的计划任务与事件调度实例分析

  

本文实例讲述了mysql的计划任务与事件调度。分享给大家供大家参考,具体如下:

  

mysql事件是基于预定义的时间表运行的任务,因此有时它被称为预定事件.mysql事件也被称为“时间触发”,因为它是由时间触发的,而不是像触发器一样更新表来触发的.mysql事件类似于UNIX中的cron作业或Windows中的任务调度程序。我们可以在优化数据库表,清理日志,归档数据或在非高峰时间生成复杂的报告的时候使用mysql事件。

  

mysql使用一个名为事件调度线程的特殊线程来执行所有调度的事件。我们可以通过执行以下命令来查看事件调度程序线程的状态:

        显示PROCESSLIST;      之前      

执行上面查询语句,得到以下结果:

        mysql>显示PROCESSLIST;   + - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +   | | |用户Id主机| db | | | | |命令时间状态信息   + - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +   localhost: 50405根| | 2 | |零睡眠| | 1966 | |零|   localhost: 50406 | 3 |根| | yiibaidb睡眠| | 1964 | |零|   localhost: 50407 | 4 |根| | yiibaidb查询| | 0 | |开始显示PROCESSLIST |   + - - - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +   3行设置      之前      

默认情况下,事件调度程序线程未启用。要启用和启动事件调度程序线程,需要执行以下命令:

        集全球event_scheduler=>   mysql>显示PROCESSLIST;   + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +   | | |用户Id主机| db | | | | |命令时间状态信息   + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +   localhost: 50405根| | 2 | |零睡眠| | 1986 | |零|   localhost: 50406 | 3 |根| | luyaran睡眠| | 1984 | |零|   localhost: 50407 | 4 |根| | luyaran查询| | 0 | |开始显示PROCESSLIST |   | 5 | event_scheduler | localhost零| |守护进程| 6 |等待>   集全球event_scheduler=;      之前      

我们知道,事件是一个包含SQL语句的命名对象,创建事件与创建其他数据库对象(如存储过程或触发器)类似,然而,存储过程仅在直接调用时执行;触发器则与一个表相关联的事件(例如插入,更新或删除)事件发生时,可以在一次或更多的规则间隔执行事件时执行触发。那,么事件呢?我们接下来就尝试使用创建事件语句,来创建事件、下面先来看下语法结构:

        (如果不存在)event_name创建事件   进度安排   做   event_body      之前      

我们来详细看下上述sql中的参数的含义:

  

首先,在创建事件子句之后指定事件名称。事件名称在数据库模式中必须是唯一的。

  

其次,如期在子句后面加上一个表。如果事件是一次性事件,则使用语法:在时间戳(+时间间隔),如果事件是循环事件,则使用每个子句:每间隔开始时间戳(+间隔)结束时间戳(+间隔)

  

第三,将语句放在做关键字之后。请注意,可以在事件主体内调用存储过程。如果您有复合SQL语句,可以将它们放在开始结束块中。

  

我们先来创建一个信息表来做演示:

        创建表(如果不存在消息   id AUTO_INCREMENT INT主键,   消息VARCHAR(255)非空,   created_at DATETIME非空   );      之前      

完事我们来使用创建事件语句创建一个事件:

        如果不存在test_event_01创建事件   在安排CURRENT_TIMESTAMP   做   插入消息(消息,created_at)   值(测试MySQL事件1,现在());      之前      

检查信息表;会看到有1条记录,这意味着事件在创建时被执行:

        mysql>SELECT * FROM消息;   + - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   | | |消息id created_at |   + - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   事件1 | 2017-08-03 | 1 |测试MySQL 04:23:11 |   + - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +   1行组      

mysql的计划任务与事件调度实例分析