MySQL 事件
概述
事件调度器是 MySQL5.1 后新增的功能,可以将数据库按自定义的时间周期触发某种操作,可以理解为时间触发器,类似于 Linux 系统下面的任务调度器 crontab,或者类似与 Windows 下面的计划任务。 MySQL 的事件调度器可以精确到每秒钟执行一个任务。
开启事件功能
查看事件功能是否开启:
show variables like '%event_scheduler%';
显示 event_scheduler
为 OFF
时,可以使用以下命令开启:
set global event_scheduler=1;
但是在 MySQL 重启之后,将会恢复原来状态,要想数据库重启后也可以让 event_scheduler
开启,则需要修改配置文件 my.cnf :
[mysqld]
event_scheduler=ON //这一行加入mysqld标签下
创建计划任务
1. 查看所有计划任务
SELECT * FROM information_schema.`EVENTS`;
2.创建计划任务
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR |
DAY_MINUTE |DAY_SECOND | HOUR_MINUTE |
HOUR_SECOND | MINUTE_SECOND}
-
DEFINER
: 定义事件执行的时候检查权限的用户。 -
ON SCHEDULE
: 定义执行的时间和时间间隔。 -
ON COMPLETION [NOT] PRESERVE
:定义事件是一次执行还是永久执行,默认为一次执行,即NOT PRESERVE
。 -
ENABLE | DISABLE | DISABLE ON SLAVE
:定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上DISABLE ON SLAVE
。 - `COMMENT comment':定义事件的注释。
举例:
1)创建一个10分钟后清空 test 表数据的事件
CREATE EVENT IF NOT EXISTS event_truncate_test2
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
DO TRUNCATE TABLE test2;
2)创建每秒钟执行一次 test_proce 存储过程的事件
CREATE EVENT IF NOT EXISTS `event_test`
ON SCHEDULE EVERY 1 SECOND
ON COMPLETION PRESERVE DISABLE
DO CALL test_proce();
3. 常见周期定时规则
1)周期执行—— EVERY
,单位有:second
,minute
,hour
,day
,week
,quarter
,month
,year
,如:
on schedule every 1 second //每秒执行1次
on schedule every 2 minute //每两分钟执行1次
on schedule every 3 day //每3天执行1次
2)在具体某个时间执行—— AT
,如:
on schedule at current_timestamp()+interval 5 day //5天后执行
on schedule at current_timestamp()+interval 10 minute //10分钟后执行
on schedule at '2016-10-01 21:50:00' //在2016年10月1日,晚上9点50执行
3)在某个时间段执行—— STARTS ENDS
,如:
on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后开始每天都执行执行到下个月底
on schedule every 1 day ends current_timestamp()+interval 5 day //从现在起每天执行,执行5天
4. 更改事件
更改事件的语法如下:
ALTER
[DEFINER = { user | CURRENT_USER }]
EVENT event_name
[ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
[DO event_body]
例如:
ALERT EVENT event_name ON COMPLETION PRESERVE ENABLE; //开启定时任务
ALERT EVENT event_name ON COMPLETION PRESERVE DISABLE; //关闭定时任务
5. 删除事件
DROP EVENT [IF EXISTS] event_name;
事件的优缺点及应用场景
1. 优点
- 定时任务由dba统一管理,避免部署在操作系统层
- 减少系统管理员产生误操作的风险
- 有利于后续的管理和维护
2. 缺点
- 在繁忙且要求性能的数据库上慎重部署和启用调度器
- 过于复杂的处理更适合使用程序实现
- 开启和关闭事件需要具有超级用户权限。
3. 应用场景
适用于定期收集统计信息,定期清除历史数据,定期数据库检查等等。
参考文章:
PHP 学习总结
研读官网文档和网络优秀个人文章,对 PHP 编程相关作出学习总结。
推荐阅读
PHP 微服务集群搭建
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通。每个服务...
Jochen赞 112阅读 14.2k评论 6
万字长文~vue+express+mysql带你彻底搞懂项目中的权限控制(附所有源码)
所谓的权限,其实指的就是:用户是否能看到,以及是否允许其对数据进行增删改查的操作,因为现在开发项目的主流方式是前后端分离,所以整个项目的权限是后端权限控制搭配前端权限控制共同实现的
水冗水孚赞 11阅读 1.5k
花了几个月时间把 MySQL 重新巩固了一遍,梳理了一篇几万字 “超硬核” 的保姆式学习教程!(持续更新中~)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
民工哥赞 11阅读 1.1k
一次偶然机会发现的MySQL“负优化”
今天要讲的这件事和上述的两个sql有关,是数年前遇到的一个关于MySQL查询性能的问题。主要是最近刷到了一些关于MySQL查询性能的文章,大部分文章中讲到的都只是一些常见的索引失效场合,于是我回想起了当初被那个...
骑牛上青山赞 8阅读 2.2k评论 2
2023最新MySQL高频面试题汇总
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~
程序员大彬赞 3阅读 978
Mysql索引覆盖
通常情况下,我们创建索引的时候只关注where条件,不过这只是索引优化的一个方向。优秀的索引设计应该纵观整个查询,而不仅仅是where条件部分,还应该关注查询所包含的列。索引确实是一种高效的查找数据方式,但...
京东云开发者赞 2阅读 936
初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。
王中阳Go赞 2阅读 407评论 1
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。