mysql 事件(Event) 总结
事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。
事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。
事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。
2 事件的优缺点
2.1 优点
一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。
可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。
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());
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 线程执行中
最新文章
- Coming
- Security8:删除Role 和 User
- Let &; Const
- CentOS7 win7 u盘装双系统 修复系统
- C++多继承的观察和7点体会(都是实用派的观点) good
- hdu 4612 Warm up 桥缩点
- linux -- 启动时启动服务或者执行命令
- Keil工程文件的建立、设置与目标文件的获得
- 彻底删除mysql的方法(有隐藏文件)
- JAX-WS 学习二:基于WEB容器,发布WebService
- ThinkPadT440 Ubuntu14.04 RTL8192EE 链接无线网
- BZOJ_1098_[POI2007]办公楼biu_链表优化BFS
- pgsql sql 统计整理
- MYCP作业
- linux查看进程已经运行了多长时间
- GoldenGate 12.2抽取Oracle 12c多租户配置过程
- Docker 搭建Spark 依赖sequenceiq/spark:1.6镜像
- ArcGIS案例学习笔记2_2_txtexcel空间可视化和空间插值
- openCV基础知识
- Python pyQt4/PyQt5 学习笔记4(事件和信号)