一、基本概念

mysql5.1版本开始引进event概念。event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发。通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程。

二、适用范围

对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理。
例如:使用event在每月的1日凌晨1点自动创建下个月需要使用的三张表。

三、使用权限

单独使用event调用SQL语句时,查看和创建需要用户具有event权限,调用该SQL语句时,需要用户具有执行该SQL的权限。Event权限的设置保存在mysql.user表和mysql.db表的Event_priv字段中。
当event和procedure配合使用的时候,查看和创建存储过程需要用户具有create routine权限,调用存储过程执行时需要使用excute权限,存储过程调用具体的SQL语句时,需要用户具有执行该SQL的权限。 查看EVENT命令有如下几种:

(1)查询mysql.event表;
(2)通过SHOW EVENTS命令;
(3)通过SHOW FULL EVENTS命令;
(4)通过查询information_schema.events表
(5)SHOW CREATE EVENT。   总之,event的使用频率较低建议使用root用户进行创建和维护。

四、基本语法

4.1 开启定时器

要使event起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1。

-- 查看是否开启定时器

SHOW VARIABLES LIKE 'event_scheduler';

-- 开启定时器 0:off 1:on

SET GLOBAL event_scheduler = 1; 

当你设定事件计划为0 或OFF,即关闭事件计划进程的时候,不会有新的事件执行,但现有的正在运行的事件会执行到完毕

对于我们线上环境来说,使用event时,注意在主库上开启定时器,从库上关闭定时器,event触发所有操作均会记录binlog进行主从同步,从库上开启定时器很可能造成卡库。切换主库后之后记得将新主库上的定时器打开。
请特别注意!

4.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
 
名称最大长度可以是64个字节。名字必须是当前Dateabase中唯一的,同一个数据库不能有同名的event。

使用event常见的工作是创建表、插入数据、删除数据、清空表、删除表。

为了避免命名规范带来的不便,最好让事件名称具有描述整个事件的能力。建议命名规则如下为:动作名称_(INTO/FROM_)表名_TIME,例如:

1.  每月创建(清空/删除)fans表:

create(truncate/drop)_table_fans_month;

2.  每天从fans表插入(删除)数据:

insert(delete)_into(from)_fans_day;

标注3:ON SCHEDULE

ON SCHEDULE 计划任务,有两种设定计划任务的方式:

1. AT 时间戳,用来完成单次的计划任务。

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

在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间。

在重复的计划任务中,时间(单位)的数量可以是任意非空(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 test1;//创建表(需要测试一下)DROP TABLE test2;//删除表CALL proc_test1();//

调用存储过程 END

使用BEGIN和END标识符将复合SQL语句按照执行顺序放在之间。当然SQL语句是有限制的,对它的限制跟函数Function和触发器Trigger 中对SQL语句的限制是一样的,如果你在函数Function 和触发器Trigger 中不能使用某些

SQL,同样的在EVENT中也不能使用。明确的来说有下面几个:

LOCK TABLES UNLOCK TABLESCREATE EVENT ALTER EVENTLOAD DATA

4.3  执行逻辑

For (已建立事件each event that has been created)

If (事件的状态非DISABLE)

And (当前时间在ENDS时间之前)

And (当前时间在STARTS时间之后)

And (在上次执行后经过的时间)

And (没有被执行)

Then: 建立一个新的线程

传递事件的SQL语句给新的线程

(该线程在执行完毕后会自动关闭)
4.4 修改事件 使用ALTER EVENT 来修改事件,具体的ALTER语法如下,与创建事件的语法类似:

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

4.5 删除事件 EVENT使用DROP EVENT语句来删除已经创建的事件,语法如下:

DROP EVENT[IF EXISTS] event_name

但当一个事件正在运行中时,删除该事件不会导致事件停止,事件会执行到完毕为止。使用DROP USER和DROP DATABASE 语句同时会将包含其中的事件删除。

五、常用实例
每隔一秒自动调用e_test()存储过程

CREATE EVENT IF NOT EXISTS e_test
ON SCHEDULE EVERY 1 SECOND
ON COMPLETION PRESERVE
DO CALL e_test();

每个月的一号凌晨1 点执行STAT()存储过程:

CREATE  EVENT  NOT EXISTS  STAT
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

六、自己编写的例子 

delimiter //use test //drop table if exists demo //create table demo(cid int,createdtime datetime
) //drop procedure if exists insertData //create procedure insertData()begindeclare howmanytimes int;declare counter int default 75;lable:while(3<=4) Doset counter= counter+1;insert  into demo(cid,createdtime) values(counter,now());if counter/5=20 thenleave lable;end if;end while;end //drop event if exists e_insertData //create event  e_insertDataon  schedule every 20 secondon  completion preservedo call insertData() //

转自:http://www.jb51.net/article/38319.htm

转载于:https://www.cnblogs.com/xyxy/p/3886739.html

MySQL存储过程定时任务相关推荐

  1. mysql设置定时任务

    联系我吧 http://qq.bishijie1999.top mysql设置定时任务 一. 首先我们要开启 mysql的定时策略 执行 show variables like '%event_sch ...

  2. Mysql编写定时任务事件

    Mysql编写定时任务事件 原文:Mysql编写定时任务事件 场景: 例如:某系统,用户每天只能拥有一次的抽奖机会,抽过后当天就不可再抽,但是过了24:00点后用户就重新拥有一次抽奖机会.像这种需要数 ...

  3. MySQL实现定时任务

    简述 本篇博客主要介绍了MySQL自身实现定时任务. 文章目录 简述 前言 一.存储过程是什么? 二.MySQL实现定时任务 1.创建表 2.导入数据 3.时间调度器 4.存储过程 5.定时任务(默认 ...

  4. MYSQL存储过程梳理

    目录 事件调度器 事件任务 存储过程 错误处理 MySQL  存储过程 if语句 MySQL IF语句语法 MySQL IF ELSE语句 MySQL IF ELSEIF ELSE语句 MySQL I ...

  5. 常用MySQL函数存储过程_解析MySQL存储过程、常用函数代码

    mysql存储过程的概念: 存储在数据库当中可以执行特定工作(查询和更新)的一组SQL代码的程序段. mysql函数的概念: 函数是完成特定功能的SQL语句,函数分为内置函数和自定义函数(user-d ...

  6. MySQL 存储过程传参之in, out, inout 参数用法

    存储过程传参:存储过程的括号里,可以声明参数. 语法是 create procedure p([in/out/inout] 参数名  参数类型 ..) in :给参数传入值,定义的参数就得到了值 ou ...

  7. Oracle job procedure 存储过程定时任务

    Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...

  8. mysql中leave和_MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法

    本文主要向大家介绍了MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. DELIMITER ...

  9. MySQL存储过程详解

    1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 ...

  10. mysql存储过程语法及实例

    存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程 c ...

最新文章

  1. 如何培养一个搞垮团队的Leader?
  2. nginx+keepalived安装配置(整理中)
  3. 简述tcp协议三报文握手过程_TCP协议中的三次握手和四次挥手(图解)
  4. [转]cubemap soft shadow
  5. VueThink配置
  6. Hibernate初步
  7. 如何在linux centos下安装git(转)
  8. 软件需求分析教程阅读笔记二
  9. java基础总结03-进制
  10. 【GIMP教程探索系列】GIMP将照片修改为符合要求的证件照吗,修改尺寸与像素,压缩图像大小
  11. html5文字游戏引擎,【HTML5 Game】一步步开发一个 TypeShot 的打字游戏
  12. Java常用算法手册-01算法概述
  13. win10系统更新时一直停留在重新启动界面的解决方法
  14. python读书心得体会范文_读书心得体会范文6篇
  15. 软件 耗电 android OS 系统,六款安卓平台浏览器耗电量实测
  16. 大数据平台之今日头条采集,今日特卖全自动发布,淘宝达人有好货一键上传
  17. java实现多态在工资系统中的应用:给出一个根据雇员类型,利用多态性完成工资单计算的程序。
  18. 我有酒,你有故事吗?
  19. nginx之root alias proxy_pass测试
  20. UE5 Oculus Quest 2 VR中设置手柄摇杆移动蓝图

热门文章

  1. xgboost4j jar包下载
  2. R-CNN学习笔记1:Selective Search for Object Recognition
  3. 【论文笔记】基于2-channel network的图片相似度判别-CVPR 2015
  4. python实现不使用额外空间去除重复元素
  5. 2021-06-27JSON介绍
  6. equal java用法_equal,和等号的用法..
  7. C++ std::multiset 删除 查找 重复元素中的特定元素
  8. ubuntu定时任务cron 访问网址php
  9. jpeg 转rgb c 语言_威刚推出SE770G移动固态硬盘 主打高速传输和RGB灯效
  10. mysql 索引使用不当_MySQL笔记:select默认使用不当索引导致的巨大性能损失问题_MySQL...