`
hzl7652
  • 浏览: 118794 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

MySQL 定时器EVENT学习

阅读更多

MySQL 定时器EVENT学习

MySQL从5.1开始支持event功能,类似oracle的job功能。有了这个功能之后我们就可以让MySQL自动的执行数据汇总等功能,不用像以前需要操作的支持了。如linux  crontab功能

创建测试表
CREATE TABLE t
(
    v VARCHAR(100) NOT NULL
) ENGINE INNODB DEFAULT CHARSET=utf8;

 

创建定时器 调用的存储过程
DELIMITER $$

DROP PROCEDURE IF EXISTS e_test $$

CREATE PROCEDURE e_test()
    BEGIN
        INSERT INTO t VALUES('1');
    END $$
   
DELIMITER ;
要使定时起作用
MySQL的常量GLOBAL event_scheduler必须为on或者是1
-- 查看是否开启定时器
SHOW VARIABLES LIKE '%sche%'; 

-- 开启定时器 0:off 1:on
SET GLOBAL event_scheduler = 1; 

-- 创建事件
--每隔一秒自动调用e_test()存储过程
CREATE EVENT IF NOT EXISTS event_test
ON SCHEDULE EVERY 1 SECOND
ON COMPLETION PRESERVE  
DO CALL e_test();

-- 开启事件
ALTER EVENT event_test ON   
COMPLETION PRESERVE ENABLE;  

-- 关闭事件
ALTER EVENT event_test ON   
COMPLETION PRESERVE DISABLE;

SELECT * FROM t;

 

一些例子:


 
从现在开始每隔九天定时执行
CREATE	EVENT EVENT1

ON SCHEDULE EVERY 9 DAY STARTS NOW()
ON COMPLETION PRESERVE ENABLE
DO
	BEGIN
	   CALL TOTAL();
	END




每个月的一号凌晨1 点执行
CREATE	EVENT EVENT2   

ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR)
ON COMPLETION PRESERVE ENABLE
DO
	BEGIN
	    CALL STAT();
	END



每个季度一号的凌晨2点执行

CREATE	EVENT TOTAL_SEASON_EVENT

ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(DATE_ADD(DATE( CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),INTERVAL 1 QUARTER),INTERVAL 2 HOUR)
ON COMPLETION PRESERVE ENABLE
DO
	BEGIN
	    CALL SEASON_STAT();
	END




每年1月1号凌晨四点执行
CREATE	EVENT TOTAL_YEAR_EVENT

ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR)
ON COMPLETION PRESERVE ENABLE
DO
	BEGIN
	    CALL YEAR_STAT();
	END
	

 MySQL的event和Oralce的Job还是有点不同的,这点让笔者比较困扰

 在进行按月,季,年进行自动调用存储过程 时,为了测试可以 把系统改为年的最后一天,如2010-12-31 23:59:55;

这个Oracle的Job就会把月,季,年存储过程执行一遍。但MySQL改了系统时间了Event也没有定时执行。不知道各位大虾有没有什么好办法?可以解决这个问题。

 

5
1
分享到:
评论
4 楼 hzl7652 2012-09-05  
zhuyuangping 写道
hzl7652 写道
zhuyuangping 写道
其实Mysql记录的是启动时间和时间间隔,通过系统时间,三个数值来计算下一个休眠时间,所以在休眠期间内改变系统时间,对休眠时间是无效的。关于Mysq 事件EVENTl那点事。http://zhuyuangping.iteye.com/admin/blogs/1669577


那你们如何测试触发时间的?比如每年执行一次,每月执行一次那种功能

可以试试启动时间推后,因为它是根据启动时间和时间间隔去计算休眠时间的。但是,只能测试一次,因为只要它执行完任务,就会再次计算休眠时间



可以试试启动时间推后? 如何推后
3 楼 zhuyuangping 2012-09-03  
hzl7652 写道
zhuyuangping 写道
其实Mysql记录的是启动时间和时间间隔,通过系统时间,三个数值来计算下一个休眠时间,所以在休眠期间内改变系统时间,对休眠时间是无效的。关于Mysq 事件EVENTl那点事。http://zhuyuangping.iteye.com/admin/blogs/1669577


那你们如何测试触发时间的?比如每年执行一次,每月执行一次那种功能

可以试试启动时间推后,因为它是根据启动时间和时间间隔去计算休眠时间的。但是,只能测试一次,因为只要它执行完任务,就会再次计算休眠时间
2 楼 hzl7652 2012-09-03  
zhuyuangping 写道
其实Mysql记录的是启动时间和时间间隔,通过系统时间,三个数值来计算下一个休眠时间,所以在休眠期间内改变系统时间,对休眠时间是无效的。关于Mysq 事件EVENTl那点事。http://zhuyuangping.iteye.com/admin/blogs/1669577


那你们如何测试触发时间的?比如每年执行一次,每月执行一次那种功能
1 楼 zhuyuangping 2012-09-01  
其实Mysql记录的是启动时间和时间间隔,通过系统时间,三个数值来计算下一个休眠时间,所以在休眠期间内改变系统时间,对休眠时间是无效的。关于Mysq 事件EVENTl那点事。http://zhuyuangping.iteye.com/admin/blogs/1669577

相关推荐

    MySQL定时器EVENT学习笔记

    MySQL定时器EVENT是一种非常实用的功能,它允许数据库管理员在预设的时间执行特定的任务,比如定期备份、清理过期数据或执行维护操作。在MySQL中,EVENTs被设计为数据库级别的对象,可以在不需要用户干预的情况下...

    mysql定时器

    下面是学习 MySQL 定时器的知识点: 什么是 MySQL 定时器? MySQL 定时器是 MySQL 中的一种事件机制,可以在指定的时间间隔内执行特定的任务。它可以用来执行存储过程、触发器、函数等,非常适合需要定期执行的...

    Mysql定时器清空3天以前的数据.zip

    针对“Mysql定时器清空3天以前的数据”的主题,我们将深入探讨如何在MySQL数据库中设置定时任务,以便自动删除3天前的数据。这通常涉及到两个主要概念:事件调度器(Event Scheduler)和SQL语句来清除数据。 首先,...

    MySQL定时器开启、调用实现代码

    MySQL定时器是数据库管理系统中的一个重要特性,它允许用户在预设的时间点或间隔执行特定的SQL操作,如数据更新、备份或清理等。这在自动化维护、数据分析和业务流程中非常有用。以下将详细介绍如何在MySQL中开启...

    mysql中event的用法详解

    MySQL中的Event是数据库管理系统提供的一种时间触发机制,它允许用户安排一次或定期执行SQL语句或存储过程。从MySQL 5.1版本开始引入,Event主要用于处理那些需要按时间规律执行的任务,比如定期备份、清理过期数据...

    mysql 定时器实例

    1、查看定时器evevt功能是否关闭  show variables like 'event_scheduler'  2、开启定时器  SET GLOBAL event_scheduler = 1;  或者:SET GLOBAL event_scheduler = 'no';  3、创建一张测试表  drop ...

    mysql学习资料整理

    - **创建定时器**: `create event 事件名 on schedule at '2023-09-01 12:00:00' do begin ... end;` - **定时器用途**: 可以用于定期备份数据库、清理日志等任务。 **5. 主从复制(Master-Slave Replication)** - ...

    MySQL数据库Event定时执行任务详解

     这里介绍的是用MySQL 建立一个定时器Event,定期清除掉之前的不必要事件。 二、内容 #1、建立存储过程供事件调用 delimiter// drop procedure if exists middle_proce// create procedure middle_proce() begin ...

    定时器所采用到的数据库

    本主题将深入探讨“定时器所采用到的数据库”,尤其是结合MySQL的InnoDB存储引擎,来阐述如何利用数据库来支持定时任务的执行。 定时器在系统中广泛用于执行计划的任务,例如备份、清理过期数据、发送通知等。它们...

    mysql 让一个存储过程定时作业的代码

    MySQL中的存储过程和事件(Event)是数据库管理系统中两种非常重要的功能,它们允许开发者执行复杂的逻辑和自动化任务。在这个例子中,我们将详细讨论如何利用存储过程和事件来创建一个定时执行的任务。 首先,我们...

    详解MySQL用事件调度器Event Scheduler创建定时任务

    MySQL中的事件调度器(Event Scheduler)是一个强大的工具,它允许用户创建定时任务,这些任务可以在预设的时间点执行或者按照固定的间隔重复执行。这个功能自MySQL 5.1.6版本开始引入,为数据库管理和自动化提供了极...

    MYSQL定时清除备份数据的具体操作

    MySQL的Event Scheduler功能正好满足这种需求。 配置MySQL的Event Scheduler是实现定时任务的第一步。默认情况下,此功能可能是关闭的,可以通过以下SQL查询来检查其状态: ```sql SHOW VARIABLES LIKE '%event_...

    mysql的定时任务实例教程

    8. **MySQL定时器开启、调用实现代码** 9. **mysql自动定时备份数据库的最佳方法(windows服务器)** 10. **mysql 让一个存储过程定时作业的代码** 11. **mysql 定时任务的实现与使用方法示例** 这些文章将提供更深入...

    Linux下如何实现Mysql定时任务

    在Linux环境下,实现MySQL定时任务通常有两种方法:一种是通过MySQL自身的Event Scheduler,另一种是利用Linux的cron定时器。这两种方式各有特点,可以根据实际需求和环境选择合适的方法。 一、MySQL Event ...

    逐步讲解MySQL中定时事件计划的创建

    首先,我们需要确认MySQL的事件调度器(Event Scheduler)是否已经开启。可以通过以下三种查询方式检查: 1. 使用`SHOW VARIABLES LIKE 'event_scheduler';` 2. 执行`SELECT @@event_scheduler;` 3. 查看`SHOW ...

    PyQt5视频学习51-65.zip

    9. **QTimer和定时器事件(QTimer and Timer Events)**:定时器允许你在特定时间间隔执行任务,比如更新UI或执行后台工作。 10. **QWebView和QWebEngineView**:用于在应用程序中嵌入网页内容,QWebView基于旧的...

Global site tag (gtag.js) - Google Analytics