mysql 定时器概念_mysql定时器event详解

一. 事件简介

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

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

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

二. 事件的优缺点

2.1 优点

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

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

2.2 缺点

定时触发,不可以调用。

三. 创建事件

查看是否开启evevt与开启evevt。

MySQL evevt功能默认是关闭的,可以使用下面的语句来看evevt的状态,如果是OFF或者0,表示是关闭的。

mysql> show VARIABLES LIKE 'event_schedu%';

+-----------------+-------+

| Variable_name   | Value |

+-----------------+-------+

| event_scheduler | OFF   |

+-----------------+-------+

1 row in set (0.00 sec)

开启event功能:

mysql> SET GLOBAL event_scheduler = 1;

Query OK, 0 rows affected (0.00 sec)

mysql> show VARIABLES LIKE 'event_schedu%';

+-----------------+-------+

| Variable_name   | Value |

+-----------------+-------+

| event_scheduler | ON    |

+-----------------+-------+

1 row in set (0.00 sec)

创建event举例:

mysql> use test-_T

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

先创建存储过程:

mysql> delimiter //

mysql> create procedure del_proc()

-> begin

-> INSERT INTO req(entname) SELECT t.`NAME` FROM (SELECT NAME, min(ZCSJ) AS mydate FROM test-_T.t_user_sign GROUP BY NAME) t WHERE t.mydate > NOW() - 36 * 60 * 1000 and t.`NAME` not in(SELECT entname from req);

-> UPDATE req SET `STATUS` = '0' where `STATUS` is null;

-> end

-> //

Query OK, 0 rows affected (0.00 sec)

执行存储过程的内容:

mysql> call del_proc();

-> //

Query OK, 2 rows affected, 1 warning (0.29 sec)

创建事件deldata_event(其作用:每隔一分钟自动调用del_proc()存储过程的内容)

mysql> create event deldata_event

-> on schedule every 1 minute

-> on completion preserve disable

-> do call del_proc();

-> //

Query OK, 0 rows affected (0.00 sec)

mysql>

mysql>

开启事件deldata_event

mysql> alter event deldata_event on completion preserve enable;

-> //

Query OK, 0 rows affected (0.00 sec)

关闭事件deldata_event

mysql>alter event deldata_event on completion preserve disable;

查看自己创建的event:

mysql> select * from  mysql.event;

+--------------+---------------+-----------------+---------+------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+------+---------+---------------+--------------------------------------------+---------+------------+-----------+----------------------+----------------------+-----------------+-----------------+

| db           | name          | body            | definer | execute_at | interval_value | interval_field | created             | modified            | last_executed       | starts              | ends | status  | on_completion | sql_mode                                   | comment | originator | time_zone | character_set_client | collation_connection | db_collation    | body_utf8       |

+--------------+---------------+-----------------+---------+------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+------+---------+---------------+--------------------------------------------+---------+------------+-----------+----------------------+----------------------+-----------------+-----------------+

| Test-_T      | deldata_event | call del_proc() | mdba@%  | NULL       |              1 | MINUTE         | 2017-05-09 10:21:57 | 2017-05-09 10:22:11 | 2017-05-09 02:24:57 | 2017-05-09 02:21:57 | NULL | ENABLED | PRESERVE      | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |         |         15 | SYSTEM    | utf8                 | utf8_general_ci      | utf8_general_ci | call del_proc() |

+--------------+---------------+-----------------+---------+------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+------+---------+---------------+--------------------------------------------+---------+------------+-----------+----------------------+----------------------+-----------------+-----------------+

1 row in set (0.00 sec)

MySQL中查看Event的执行情况

通过执行如下的语句:

SELECT * FROM information_schema.EVENTS;

例如:

mysql> SELECT * FROM information_schema.events \G

*************************** 1. row ***************************

EVENT_CATALOG: def

EVENT_SCHEMA: ixinnuo_sjcj

EVENT_NAME: deldata_event

DEFINER: mdba@%

TIME_ZONE: SYSTEM

EVENT_BODY: SQL

EVENT_DEFINITION: call del_proc()

EVENT_TYPE: RECURRING

EXECUTE_AT: NULL

INTERVAL_VALUE: 1

INTERVAL_FIELD: MINUTE

SQL_MODE: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

STARTS: 2017-05-09 10:21:57

ENDS: NULL

STATUS: ENABLED

ON_COMPLETION: PRESERVE

CREATED: 2017-05-09 10:21:57

LAST_ALTERED: 2017-05-09 10:22:11

LAST_EXECUTED: 2017-05-11 08:43:57

EVENT_COMMENT:

ORIGINATOR: 15

CHARACTER_SET_CLIENT: utf8

COLLATION_CONNECTION: utf8_general_ci

DATABASE_COLLATION: utf8_general_ci

1 row in set (0.00 sec)

可以看到相应的库中的作业信息,其中LAST_EXECUTED字段会反映出相应的作业最近一次的执行时间

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15498/viewspace-2138719/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值