mysql的事件是干嘛的_mysql 事件(Event) 总结

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

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

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

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

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

2.2 缺点

定时触发,不可以调用。

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

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

循环执行事件

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());

20180111005424308285.png

phpmyadmin中可以直接创建事件

show variables like ‘%event_scheduler%‘;

通过命令行

SET GLOBAL event_scheduler = ON;

SET @@global.event_scheduler = ON;

SET GLOBAL event_scheduler = 1;

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 线程执行中

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值