概述

由于最近在做某些日志表的清理工作,会用到定时任务,所以这里也简单介绍一下mysql如何用事件来实现定时任务。

后面会介绍两个日志表清理实现方案,一种是传统的定时delete,另一种会稍微复杂点,主要是针对比较大型的项目。


一、事件概述

在MySQL 5.1中新增了一个特色功能事件调度器(Event Scheduler),简称事件。

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

事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。


二、事件的优缺点

1、优点

一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。

2、缺点

定时触发,不可以调用。


三、事件调度器参数

事件由一个特定的线程来管理。启用事件调度器后,拥有SUPER权限的账户执行SHOW PROCESSLIST就可以看到这个线程了。

--查看事件是否开启。SHOW VARIABLES LIKE 'event_scheduler';SELECT @@event_scheduler;--全局开启事件调度器SET GLOBAL event_scheduler = ON;--全局关闭事件调度器SET GLOBAL event_scheduler = OFF;--永久开启事件调度器(在my.cnf配置文件中添加)#事件调度器启动状态event_scheduler = on

四、创建事件

一条create event语句创建一个事件。每个事件由两个主要部分组成,第一部分是事件调度(eventschedule,表示事件何时启动以及按什么频率启动;

第二部分是事件动作(event action),这是事件启动时执行的代码,事件的动作包含一条SQL语句,它可能是一个简单地insert或者update语句,也可以使一个存储过程或者

benin...end语句块,这两种情况允许我们执行多条SQL。

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

相关语法:

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}

说明:


五、事件(定时任务)管理

1、查询事件

在MySQL中可以通过查询information_schema.events表,查看已创建的事件。

--查看当前所在库的事件show events;--查看所有事件SELECT * FROM information_schema.events; 

2、修改事件

事件被创建之后,还可以使用ALTER EVENT语句修改其定义和相关属性

ALTER[DEFINER={user | CURRENT_USER}]EVENT [IF NOT EXISTS] event_nameON SCHEDULE schedule[ON COMPLETION [NOT] PRESERVE][ENABLE | DISABLE | DISABLE ON SLAVE][COMMENT 'comment']DO event_body;

3、启动与关闭事件

ALTER EVENT语句可以让一个事件关闭或再次活动。

--启动事件。ALTER EVENT event_name ENABLE;--关闭事件。ALTER EVENT event_name DISABLE;

4、删除事件

删除已经创建的事件可以使用DROP EVENT语句来实现。

 DROP EVENT IF EXISTS event_name;

六、实例演示

1、事件+sql

创建名称为event_t1的事件,用于每隔5秒钟向数据表t1(用户信息表)中插入一条数据。

-- 创建用户信息表CREATE TABLE IF NOT EXISTS t1( id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号', name VARCHAR(30) NOT NULL COMMENT '用户姓名', create_time TIMESTAMP COMMENT '创建时间') COMMENT = '用户信息表';-- 创建事件CREATE EVENT IF NOT EXISTS event_t1ON SCHEDULE EVERY 5 SECONDON COMPLETION PRESERVECOMMENT '新增用户信息定时任务'DO INSERT INTO t1(name,create_time) VALUES('hwb',NOW());

2、事件+存储过程

--创建总表CREATE TABLE IF NOT EXISTS t_total( userNumber INT  COMMENT '用户数', createtime TIMESTAMP COMMENT '创建时间') COMMENT = '总表';--创建名称为t_total的存储过程,用于统计前面表插入的数量CREATE PROCEDURE t_total()BEGIN DECLARE n_total INT default 0; SELECT COUNT(*) INTO n_total FROM t1; INSERT INTO t_total (userNumber,createtime) VALUES(n_total,NOW());END;--创建名称为event_total的事件,用于在每天12点调用存储过程。CREATE EVENT IF NOT EXISTS event_totalON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 12 HOUR)ON COMPLETION PRESERVE ENABLEDO CALL t_total();

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

iframe关闭时触发事件_超详细的mysql数据库事件--定时任务介绍及日常管理相关推荐

  1. mysql序列号生成_超详细的mysql数据库GTID介绍—概念、优缺点、原理、生命周期等

    概述 这几天就简单介绍一下GTID好了~这篇是概念篇.. 从MySQL 5.6.5 开始新增了一种基于 GTID 的复制方式.通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID.这种 ...

  2. 清空缓存的命令_超详细的mysql数据库查询缓存原理解析、涉及命令、流程分析等...

    概述 mysql查询缓存在数据库优化可以起到很大的作用,今天主要针对这一块做一个总结,下面一起来看看吧~ 一.缓存条件,原理 MySQL Query Cache是用来缓存我们所执行的SELECT语句以 ...

  3. mysql 的事件_一文总结MySQL数据库事件--定时任务实现方式

    由于最近在做某些日志表的清理工作,会用到定时任务,所以这里也简单介绍一下mysql如何用事件来实现定时任务. 后面会介绍两个日志表清理实现方案,一种是传统的定时delete,另一种会稍微复杂点,主要是 ...

  4. mysql 崩溃恢复_超详细的MySQL数据库InnoDB崩溃恢复机制总结

    概述 数据库系统与文件系统大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的崩溃恢复机制来保证.下面 ...

  5. 字符集_超详细的MySQL数据库字符集总结,值得收藏

    概述 MySQL支持多种字符集(character set)提供用户存储数据,同时允许用不同排序规则(collation)做比较.下面基于MySQL5.7介绍一下字符集相关变量的使用. 一.字符集.字 ...

  6. mysql数据库字符集_超详细的MySQL数据库字符集总结,值得收藏

    MySQL支持多种字符集(character set)提供用户存储数据,同时允许用不同排序规则(collation)做比较.下面基于MySQL5.7介绍一下字符集相关变量的使用. 一.字符集.字符序的 ...

  7. php简单的mysql类_超简单php mysql数据库查询类

    本文章为你免费提供一款漂亮的超简单php mysql数据库查询类哦 */ class Config{ private $host;        //主机名称:一般是localhost private ...

  8. mysql数据库查询源码_超简单php mysql数据库查询类

    本文章为你免费提供一款漂亮的超简单php mysql数据库查询类哦 */ class Config{ private $host; //主机名称:一般是localhost private $root; ...

  9. mysql多字段数据统计_超详细的mysql元数据sql统计--information_schema

    概述 information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库.其中 performance_schema 用于性能分析,而 in ...

最新文章

  1. 【CV】相对位姿估计的进展和新方法
  2. C# 通过反射获取方法/类上的自定义特性
  3. 用css3和jquery实现的渐变的动态进度条
  4. C++输入输出流重载
  5. git每次更新都需要输入账号密码,如何解决?
  6. redis怎么开启_关于Redis数据库入门必备的学习点
  7. 后台扫描与备份文件泄露(御剑+dirsearch使用)
  8. 简谈PCB设计软件对比
  9. C++初学 贪吃蛇项目
  10. mysql索引的常识
  11. linux命令行测试上网,如何使用linux命令行来测试网速
  12. 《深入浅出SpringCloud》SpringCloud整体架构概览
  13. 【离散数学】编程练习:求偏序集中的极大元与极小元
  14. imx6ull用video4linux,CB140(imx6ull)使用Openwrt系统
  15. 加载msvcr100.dll时提示已加载,但是为什找不到输入点dllregisterserver
  16. 使用opencv截取旋转框目标
  17. Python2中文乱码处理
  18. 了解USB-HID协议
  19. windows10 mysql-8.0.20 重新初始化
  20. 自动驾驶仿真 (三)—— 基于PreScan与Simulink的AEB系统仿真

热门文章

  1. Speedtree学习笔记(案例)——草的制作
  2. Ubuntu 网络配置方法汇总
  3. Ubuntu14.04 JMicron JMC250 Gigabit Ethernet Controller
  4. 剥开区块链的皮,仅剩最后的欢愉
  5. 智能制造转型:企业应如何避免陷入转型盲区,减少资金浪费
  6. 戏曲app开发,展现戏曲行业发展新生机
  7. 机器学习基础 | 监督学习与无监督学习的快速入门指南
  8. 【CVPR 2020】图神经网络在计算机视觉上的应用:精选论文两篇
  9. 2010年互联网领域8大预言
  10. 柠萌影视通过聆讯:年营收12亿 腾讯与芒果文创是股东