`
wenson
  • 浏览: 1053483 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MYSQL EVENT 使用手册

 
阅读更多

一、前言

自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得 一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。

事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。

在使用这个功能之前必须确保event_scheduler已开启,可执行

SET GLOBAL event_scheduler = 1;

SET GLOBAL event_scheduler = ON;

来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如:

mysqld ... --event_scheduler=1

 

要查看当前是否已开启事件调度器,可执行如下SQL:

SHOW VARIABLES LIKE 'event_scheduler';

SELECT @@event_scheduler;

SHOW PROCESSLIST;

二、创建事件(CREATE EVENT)

先来看一下它的语法:

CREATE EVENT [IF NOT EXISTS] event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE]
    [COMMENT 'comment']
    DO sql_statement;
 
schedule:
    AT TIMESTAMP [+ INTERVAL INTERVAL]
  | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
 
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) 首先来看一个简单的例子来演示每秒插入一条记录到数据表

USE test;
CREATE TABLE aaa (timeline TIMESTAMP);
CREATE EVENT e_test_insert
	ON SCHEDULE EVERY 1 SECOND 
	DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

等待3秒钟后,再执行查询看看:

mysql> SELECT * FROM aaa;
+---------------------+ 
| timeline            | 
+---------------------+ 
| 2007-07-18 20:44:26 | 
| 2007-07-18 20:44:27 | 
| 2007-07-18 20:44:28 | 
+---------------------+

2) 5天后清空test表:

CREATE EVENT e_test
	ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
	DO TRUNCATE TABLE test.aaa;

3) 2007年7月20日12点整清空test表:

CREATE EVENT e_test
	ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
	DO TRUNCATE TABLE test.aaa;

4) 每天定时清空test表:

CREATE EVENT e_test
	ON SCHEDULE EVERY 1 DAY
	DO TRUNCATE TABLE test.aaa;

5) 5天后开启每天定时清空test表:

CREATE EVENT e_test
	ON SCHEDULE EVERY 1 DAY
	STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
	DO TRUNCATE TABLE test.aaa;

6) 每天定时清空test表,5天后停止执行:

CREATE EVENT e_test
	ON SCHEDULE EVERY 1 DAY
	ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
	DO TRUNCATE TABLE test.aaa;

7) 5天后开启每天定时清空test表,一个月后停止执行:

CREATE EVENT e_test
	ON SCHEDULE EVERY 1 DAY
	STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
	ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
	DO TRUNCATE TABLE test.aaa;

[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。
8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):

CREATE EVENT e_test
	ON SCHEDULE EVERY 1 DAY
	ON COMPLETION NOT PRESERVE
	DO TRUNCATE TABLE test.aaa;

[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT 'comment']可以给该事件加上注释。

三、修改事件(ALTER EVENT)

ALTER EVENT event_name
    [ON SCHEDULE schedule]
    [RENAME TO new_event_name]
    [ON COMPLETION [NOT] PRESERVE]
    [COMMENT 'comment']
    [ENABLE | DISABLE]
    [DO sql_statement]

1) 临时关闭事件

ALTER EVENT e_test DISABLE;

2) 开启事件

ALTER EVENT e_test ENABLE;

3) 将每天清空test表改为5天清空一次:

ALTER EVENT e_test
	ON SCHEDULE EVERY 5 DAY;

四、删除事件(DROP EVENT)

语法很简单,如下所示:

DROP EVENT [IF EXISTS] event_name

例如删除前面创建的e_test事件

DROP EVENT e_test;

当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS

DROP EVENT IF EXISTS e_test;
分享到:
评论

相关推荐

    Mysql 5.5指导手册

    这个"MySQL 5.5指导手册"是一个详尽的参考资料,适合数据库管理员、开发人员以及对MySQL感兴趣的初学者使用。 手册可能涵盖以下关键知识点: 1. **安装与配置**:手册会详细解释如何在不同的操作系统上安装MySQL ...

    MySQL数据库卸载手册

    MySQL 数据库卸载手册 本文档将详细介绍如何彻底卸载 MySQL 数据库,包括停止 MySQL 服务、卸载 MySQL 安装程序、删除安装目录下的所有文件、删除隐藏目录中的 MySQL 目录和清理注册表等步骤。 停止 MySQL 服务 ...

    MySQL参考手册中文完整翻译版

    这份手册详尽地涵盖了MySQL的安装、配置、使用、管理以及优化等方面的知识,旨在帮助用户深入理解并有效地操作MySQL。 1. **MySQL基础**: - 数据库概念:MySQL是一个开源的关系型数据库管理系统,采用SQL(结构化...

    MySQL卸载手册.doc

    以下是一份详细的MySQL卸载手册,旨在帮助用户安全地卸载MySQL并清除所有相关组件。 首先,卸载MySQL的正确步骤是从操作系统中停止MySQL服务。这通常可以通过服务管理工具或命令行完成。在Windows系统中,你可以按...

    MySQL安装指南.pdf

    这些项通常位于HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQL、HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQL以及HKEY_LOCAL_MACHINE/SYSTEM/...

    (带目录版)MySQL LVS+Keepalived+MHA 高可用群集 应用部署操作手册

    ### MySQL LVS+Keepalived+MHA 高可用群集应用部署操作手册知识点解析 #### MHA 架构介绍与工作原理 - **MHA(Master High Availability)概述** - MHA 是一套用于MySQL高可用环境下的故障切换和主从提升方案,由...

    mysql卸载手册,有需要的可以看下

    3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 请注意,修改注册表有风险,如果不小心删除了其他非MySQL的键值,可能会导致系统不稳定。因此,建议在进行此操作前备份...

    lvs+keepalived+mha+mysql架构最佳部署手册

    - 使用MySQL 5.5的半同步复制可以大大降低数据丢失的风险。MHA可以与半同步复制结合使用。如果仅有一个从服务器已经接收到最新的二进制日志,MHA可以将这些最新的日志应用于其他所有从服务器上,以保持数据一致性。 ...

    MySQL_5[1].1中文参考手册

    根据提供的文件信息,我们可以归纳出一系列重要的IT知识点,主要聚焦于MySQL 5.1版本的特性和使用指南。以下是对这些知识点的详细说明: ### 一、MySQL 5.1 概览 #### 1.1 关于MySQL 5.1 MySQL 5.1是一款由MySQL ...

    mysql-64位安装手册附带卸载流程.doc

    3. **开启事件**: 如果需要使用定时任务(事件调度器),在配置文件中找到`event_scheduler`,将其值设置为`ON`。 4. **设置用户**: 用户管理包括创建新用户、分配权限等,可以通过`CREATE USER`和`GRANT`等SQL语句...

    MySql

    MySql手册中将event.txt导入数据库中的问题

    PHP5.3 MySQL5.1 CSS 3.3 JavaScript参考手册

    6. 事件调度器(Event Scheduler):允许设置定期执行的任务,如备份或数据清理。 【CSS3.3】 CSS(Cascading Style Sheets)3.3是CSS的最新版本,带来了丰富的样式控制和布局能力: 1. 选择器增强:新增了伪元素...

    Mysql ERROR 1577错误解决方法

    代码如下:ERROR 1577 (HY000): Cannot proceed because system tables used by Event Scheduler were found damaged at server start。 查看手册(5.4. mysql_fix_privilege_tables:升级MySQL系统表),一些MySQL...

    Apache 2.2中文手册

    8. **与其他技术集成**:Apache常与PHP、Perl、Python等脚本语言配合使用,手册会说明如何配置这些集成,以及与数据库(如MySQL)的连接。 9. **故障排除与最佳实践**:手册通常包含丰富的故障排除指南和最佳实践...

    Mysql 5.7 基于组复制(MySQL Group Replication) - 精华版

    本篇文章详细介绍了 MySQL 5.7 基于组复制(MySQL Group Replication)的配置说明,实为线上操作手册,在此分享,希望能帮助到有用到的朋友~ MySQL 组复制(MySQL Group Replication)是 MySQL 官方于 2016 年 12 月...

    Qt5.10+GUI完全参考手册,qt5.15.2,C,C++

    本参考手册针对Qt5.10版本,详细介绍了如何使用Qt进行图形用户界面(GUI)开发。 **Qt5.15.2更新** 尽管标题中提到的是Qt5.10,但值得注意的是,Qt5.15.2是Qt5系列的一个后续更新,引入了更多的功能和修复了大量的...

    Activiti中文手册

    Activiti 中文手册知识点总结 Activiti 是一个基于 BPMN 2.0 的工作流引擎,提供了强大的流程管理和自动化功能。本文档将对 Activiti 的主要特性和使用方法进行详细介绍。 Activiti 简介 Activiti 是一个开源的...

Global site tag (gtag.js) - Google Analytics