Mysql编写定时任务事件

场景:

  例如:某系统,用户每天只能拥有一次的抽奖机会,抽过后当天就不可再抽,但是过了24:00点后用户就重新拥有一次抽奖机会。像这种需要数据库定时对某个字段进行更新操作的任务,完全可以通过数据库本身的事件机制进行操作,而服务器端也不需要用额外的代码进行这种监控定时的操作。

Mysql:

  本文讨论的是Mysql数据库,Event
Scheduler事件调度器应该是在Mysql5.1引入的,所以使用定时任务调度时,请注意查看你的Mysql版本。

创建事件调度的语法:


/*创建事件event_name*/
DELIMITER $$

CREATE event IF NOT EXISTS event_name

ON SCHEDULE 任务条件

ON COMPLETION PRESERVE

DO SQL操作

DELIMITER ;

实例情景:每半个小时更新统计字段count为0,


/*创建定时定时更新count字段事件*/
DELIMITER $$

CREATE event IF NOT EXISTS update_count

ON SCHEDULE EVERY 30 MINUTE

/*MYSQL注意时区设置,默认非中国时区*/
STARTS TIMESTAMP ‘2009-12-18 02:58:00‘

ON COMPLETION PRESERVE

DO update tb_count set count=0 $$

DELIMITER ;

如上,创建了一个名叫update_count的事件,执行条件则为每30分钟执行一次,(EVERY 30
MINUTE),执行Sql为(update tb_count set count=0), 当然你可能会按天执行,所以你也可以写(EVERY
1 DAY),

如果执行的任务Sql复杂,我们可以写触发器,直接看示例代码:


DELIMITER $$

DROP PROCEDURE IF EXISTS update_count$$

CREATE PROCEDURE update_count()

BEGIN
UPDATE tb_count SET count=0;
END$$

DELIMITER ;

以上为创建一个存储过程update_count,执行对tb_count中count字段的更新。任务中代码中do字段后则改为(call update_count()
$$)
。当然你可能会更复杂的需求。

添加完event后,还需要查看event_scheduler是否开启,否则添加的event不会执行,移步下面的代码:


/*查看event是否开启*/
SHOW VARIABLES LIKE ‘%sche%‘;
/*开启event*/
SET GLOBAL event_scheduler=1;

查看和关闭你所添加的event:


/*关闭 event */
ALTER event update_count ON COMPLETION PRESERVE DISABLE;

/*启用 event */
ALTER event update_count ON COMPLETION PRESERVE ENABLE;

更多MySql语法可查看:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html

时间: 2024-10-09 19:39:39

Mysql编写定时任务事件的相关文章

MySQL存储过程定时任务

一.基本概念 mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程. 二.适用范围 对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理.例如:使用event在每月的1日凌晨1点自动创建下个月需要使用的三张表. 三.使用权限 单独使用event调用SQL语句时,查看和

MySQL创建定时任务

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

如何写mysql的定时任务

什么是事件: 一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行: 查看是否开启: show variables like 'event_scheduler'; 如果显示OFF,则输入以下语句开启: set global event_scheduler = on; 提醒:虽然这里用set global event_scheduler = on语句开启了事件,但是每次重启电脑.或重启mysql服务后,会发现,事件自动关

[DB] - Mysql创建定时任务

mysql支持定时任务的创建,要求mysql服务器开始定时任务调度. 1. 查看是否开启定时任务执行 SHOW VARIABLES LIKE 'event_scheduler'; // OFF表示没有开启2. 开启定时任务 SET GLOBAL event_scheduler = ON; 或者 my.cnf文件中添加event_scheduler = 1 3. 编写定时任务 语法规则: CREATE EVENT [IF NOT EXISTS] event_name  // 指定名称 ON SCH

MySQL job/定时任务/event 学习

参考文章: https://blog.csdn.net/qq_21108311/article/details/82589850 https://blog.csdn.net/qq_27238185/article/details/56271877 https://blog.csdn.net/lxpbs8851/article/details/8019965 概要简述 原文链接:https://blog.csdn.net/qq_21108311/article/details/82589850 M

Mysql 存储过程+定时任务,完成分区自动维护

建表: drop table if exists terminal_parameter; CREATE TABLE `terminal_parameter` ( `terminal_parameter_id` int(11) NOT NULL AUTO_INCREMENT, .................... `createtime` datetime NOT NULL, `userid` int(8) NOT NULL, `terminal_id` int(8) DEFAULT NULL

MySql中的事件

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

MySQL 灵异事件一则 -- desc报语法错误

今天有一开发同学找到我,说查询SQL中倒序报错,不明原因,于是奔赴工位现场研究情况. 果然,只要SQL中带有desc 就会报错,而ASC没问题. 哪怕desc放在句首用作explain也会报错. 报错信息为语法错误... 检查了sql-mode发现是空,看来不是这个原因,那问题出在哪呢? 测试库的环境是保存在windows个人电脑中的,开发MM说,以前没遇到过这个情况,但是最近为了图省事,在windows的msconfig中配置了MySQL开机启动,然后就这样了. 于是shutdown数据库,手

Mysql中的事件(定时任务)

一.什么是事件 一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行: 二.开启事件 查看是否开启: show variables like 'event_scheduler'; 如果显示OFF,则输入以下语句开启: set global event_scheduler = off; 三.自定义简单的事件 新建user表: -- ---------------------------- -- Table structu