`

mysql中event(定时触发)的使用

 
阅读更多

1、从MySQL5.1.6版本开始增加事件调度器(Event Scheduler),在使用这个功能之前必须确保event_scheduler已开启

  1.1、开启event_scheduler,可使用以下方法

 SET GLOBAL event_scheduler = 1; 
 SET GLOBAL event_scheduler = ON;
 在配置my.cnf文件 中加上 event_scheduler = 1

 

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

SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;
SELECT * from  mysql.event;
SELECT * from information_schema.events;

 

2、CREATE EVENT 语法如下:

 

CREATE EVENT
[IF NOT EXISTS] --------------------------------------*语法1
event_name --------------------------------------------*语法2

ON SCHEDULE schedule ------------------------------*语法3 
[ON COMPLETION [NOT] PRESERVE] --------------*语法4

[ENABLE | DISABLE] ----------------------------------*语法5 
[COMMENT 'comment'] -------------------------------*语法6 
DO sql_statement --------------------------------------*语法7

说明如下:
语法1、[IF NOT EXISTS]
使用IF NOT EXISTS,当event名称存在时不创建,只有名称不存在时才创建,建议不使用以保证event创建成功。

语法2、event_name
event名称,最大长度为64个字节且唯一。
语法3、ON SCHEDULE 计划任务,有两种设定计划任务的方式:
 方式1:AT 时间戳,用来完成单次的计划任务;

              时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。

 方式2: EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务;

               时间(单位)的数量可以是任意非空(Not Null)的整数式,时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND
注: 其他的时间单位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建议使用这些不标准的时间单位。
语法4、[ON COMPLETION [NOT] PRESERVE]
ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。

而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。
语法5、[ENABLE | DISABLE]:参数Enable和Disable表示设定事件的状态(Enable:执行这个事件、Disable:不执行该事件)
可以用如下命令关闭或开启事件:ALTER EVENT event_name  ENABLE/DISABLE
语法6、[COMMENT 'comment']
 注释会出现在元数据中,它存储在information_schema表的COMMENT列,最大长度为64个字节。'comment'表示将注释内容放在单引号之间,建议使用注释以表达更全面的信息。
语法7、 DO sql_statement
DO sql_statement字段表示该event需要执行的SQL语句或存储过程。这里的SQL语句可以是复合语句,例如:
BEGIN
CREATE TABLE tab_name;//创建表
DROP TABLE tab_name;//删除表
CALL proc_name();//调用存储过程
END
使用BEGIN和END标识符将复合SQL语句按照执行顺序放在之间。当然SQL语句是有限制的,对它的限制跟函数Function和触发器Trigger 中对SQL语句的限制是一样的,

如果你在函数Function 和触发器Trigger 中不能使用某些SQL,同样的在EVENT中也不能使用。明确的来说有下面几个:
LOCK TABLES
UNLOCK TABLES
CREATE EVENT
ALTER EVENT
LOAD DATA

3、 执行逻辑

For (已建立事件each event that has been created)
If (事件的状态非DISABLE)
And (当前时间在ENDS时间之前)
And (当前时间在STARTS时间之后)
And (在上次执行后经过的时间)
And (没有被执行)
Then:
建立一个新的线程
传递事件的SQL语句给新的线程
(该线程在执行完毕后会自动关闭)
4、修改事件
使用ALTER EVENT 来修改事件,具体的ALTER语法如下,与创建事件的语法类似:
ALTER EVENT
event_name
ON SCHEDULE schedule
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement
5、 删除事件
EVENT使用DROP EVENT语句来删除已经创建的事件,语法如下:
DROP EVENT [IF EXISTS] event_name

6、 实例

-- 创建存储过程
DROP PROCEDURE prc_delete_sys_menu_name;
CREATE PROCEDURE prc_delete_sys_menu_name()
BEGIN
	delete from sys_menu_name;
END;
-- 测试
CALL prc_delete_sys_menu_name();

-- 创建Event
-- 每隔10秒执行
DROP EVENT IF EXISTS eve_delete_sys_menu_name;
CREATE EVENT IF NOT EXISTS eve_delete_sys_menu_name
ON SCHEDULE EVERY 10 SECOND
ON COMPLETION PRESERVE
DO CALL prc_delete_sys_menu_name();

-- 设置开启event_scheduler
SET GLOBAL event_scheduler = ON;  
-- 查看是否开启event_scheduler
SHOW VARIABLES LIKE 'event_scheduler'; 
SELECT * from  mysql.event;
分享到:
评论

相关推荐

    mysql中event的用法详解

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

    MySQL Event Scheduler(事件调度器)

    事件调度器是定时触发执行的,在这个角度上也可以称作是”临时的触发器”。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也...

    mysql定时任务(event事件)实现详解

    MySQL中的定时任务,通常指的是Event事件,它是一种内置的机制,允许用户在特定时间或周期性地执行SQL语句或存储过程,而无需依赖操作系统级别的计划任务。Event事件的引入,使得数据库自身就能处理定时任务,提高了...

    mysql计划任务教程.zip_mysql下载完是个压缩包

    这篇文章可能详述了设置MySQL定时任务的具体步骤,包括如何使用CREATE EVENT语句创建事件,以及如何使用ALTER EVENT或DROP EVENT修改或删除已存在的任务。 “mysql计划任务每天定时执行.url”则可能是一个指导如何...

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

    如果权限不足,将无法创建或执行事件,需要更新`mysql.user`和`mysql.db`表中的`Event_priv`字段,并使用`FLUSH PRIVILEGES;`命令使更改生效。 创建事件的语法如下: ```sql CREATE EVENT [IF NOT EXISTS] event_...

    在数据库中实现定时任务-详解及实例.pdf

    或者直接在MySQL命令行中使用SQL语句开启事件调度器: ```sql SET GLOBAL event_scheduler = ON; SET @@global.event_scheduler = ON; SET GLOBAL event_scheduler = 1; SET @@global.event_scheduler = 1; ...

    ​MySQL语句-ALTER EVENT详细介绍.pdf

    ### MySQL中的ALTER EVENT详解 #### 一、概述 在MySQL中,`EVENT`是一种非常有用的数据库对象,它能够实现自动化的SQL任务调度功能。通过这种机制,用户可以在预设的时间点或者按照一定的周期性时间间隔自动执行一...

    45-MySQL单表2000万数据查询慢解决方案1

    我们使用MySQL的时间触发器来实现定时任务。首先,需要开启事件调度器,使用命令`set global event_scheduler=1;`。然后,创建一个事件,每秒执行一下adduser函数。 函数设计 我们创建了一个专门insert数据的函数,...

    MySQL定时器EVENT学习笔记

    MySQL定时器EVENT是一种非常...总结来说,MySQL定时器EVENT是数据库自动化管理的强大工具,它可以帮助我们实现定时任务,提高工作效率,减轻运维负担。正确理解和使用EVENT,可以有效地优化数据库的管理和维护流程。

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

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

    mysql 定时任务的实现与使用方法示例

    MySQL定时任务是数据库管理系统中非常重要的功能,它允许数据库管理员设定特定时间执行一系列维护或业务逻辑操作。在MySQL 5.1.6版本之后,引入了事件调度器(Event Scheduler),使得用户无需依赖操作系统级别的...

    带你了解MySQL中的事件调度器EVENT

    MySQL中的事件调度器(EVENT)是一个功能强大的工具,允许数据库管理员安排MySQL数据库执行计划任务。这些计划任务可以定时执行特定的SQL语句或语句块,从而实现周期性的数据处理和维护任务自动化。事件调度器类似于...

    mysql的新特性:事件

    本文将详细介绍MySQL 5.1中的事件特性,并通过具体示例来展示其强大的功能。 #### 二、事件概述 事件是MySQL中一种用于自动化执行SQL语句的功能。它可以被设定为一次性任务或定期重复执行的任务。通过事件,用户...

    MySQL-Events-CN.rar

    MySQL事件(Events)是数据库管理系统中的一个重要特性,它允许用户创建和调度在特定时间执行的任务,类似于操作系统中的计划任务或Windows服务。这个压缩包“MySQL-Events-CN.rar”包含了一个名为“MySQL-Events-...

    第12章MySQL触发器与事件.docx

    - 不能在触发器中使用开始或结束事务的语句,如`START TRANSACTION`、`COMMIT`或`ROLLBACK`。 3. **事件调度器(Event Scheduler)**: - 事件调度器自MySQL 5.1版本引入,作为一个内置的定时任务管理工具,能够...

    计算机二级考试MySQL数据库强化习题.pdf

    在MySQL中,可以通过`CREATE EVENT`语句创建事件。习题中提到的事件`event_delete_content`会在每个月的特定时间删除特定用户的留言。 ```sql CREATE EVENT event_delete_content ON SCHEDULE EVERY 1 MONTH STARTS...

    如何在MySQL中使用预定事件

    这在自动化数据维护、定期备份或者定时触发业务逻辑时非常有用。在本篇文章中,我们将深入探讨如何在MySQL中创建、修改、启用、禁用以及删除预定事件。 首先,创建MySQL事件涉及到以下步骤: 1. **定义事件名称**:...

    MySQL的事件调度器使用介绍

    - 或者在MySQL配置文件`my.ini`中添加`event_scheduler=1`,然后重启MySQL服务。 2. **启动参数**: - 在启动MySQL服务器时,添加`-event_scheduler=1`作为命令行参数。 检查事件调度器是否已启用,可以执行: `...

Global site tag (gtag.js) - Google Analytics