mysql存储过程执行_mysql存储过程不执行

mysql存储过程执行_mysql存储过程不执行查看event是否开启:showvariableslike’%sche%’;将事件计划开启:setglobalevent_scheduler=1;关闭事件任务:alterevente_testONCOMPLETIONPRESERVEDISABLE;开户事件任务:alterevente_testONCOMPLETIONPRESERVEENABLE;简单实例….

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

查看event是否开启: show variables like ‘%sche%’;

将事件计划开启: set global event_scheduler=1;

关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE;

开户事件任务: alter event e_test ON COMPLETION PRESERVE ENABLE;

简单实例.

创建表 CREATE TABLE test(endtime DATETIME);

创建存储过程test

CREATE PROCEDURE test ()

BEGIN

update examinfo SET endtime = now() WHERE id = 14;

END;

创建event e_test

CREATE EVENT if not exists e_test

on schedule every 30 second

on completion preserve

do call test();

每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.

实战mysql存储程序与定时器

存储过程定时器eventprocedure实战

需求:一个庞大的日志表,现每天做定时统计一天的总数,放另一个表中,方便查看,运营。

旧方案:用脚本写好程序,用linux的crontab定时执行。

本文重点,用mysql定时器定时执行存储程序。

第一步:编写存储程序(需了解基本的存储程序的语法)

Sql代码

create procedure inproc()

begin

declare done int default 0;

declare a,b,c int;

declare curl cursor for select ver,date_format(time,’%Y%m%d’) as dt,count(*) as count from ty.count where time>date_sub(curdate(),interval 1 day) group by ver,dt;

declare continue handler for sqlstate ‘02000’ set done = 1;

open curl;

repeat

fetch curl into a,b,c;

if not done then

insert into ty.daycount values (null,b,a,c);

end if;

until done end repeat;

close curl;

end

这个存储程序主要用过了declare定义局部变量,声明curl光标,利用光标直到遍历结果集的作用。

执行这个语句之前要先

Sql代码

delimiter $$

执行完成后再

Sql代码

delimiter ;

用show查看是否已经成功

Sql代码

show procedure status like ‘%%’;

第二步:开启mysql定时器

如果不是on,就执行

Sql代码

set global event_scheduler=1;

不需要重启mysql

会发现mysql多起了一个daemon进程

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

第三步:创建定时任务

语法:

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

;

标注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表示系统不执行该事件。

可以用如下命令关闭或开启事件:

Sql代码

ALTER EVENT event_name ENABLE/DISABLE

下面是我的实例,每天凌晨一点执行

Sql代码

CREATE EVENT `event_call_inproc` ON SCHEDULE EVERY 1 DAY STARTS ‘2013-09-12 01:00:00’ ON COMPLETION PRESERVE ENABLE DO begin call ty.inproc();end

另外的一些例子:

Sql代码

每个月的一号凌晨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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194524.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux基础语法

    Linux基础语法LInuxlinux一切皆文件读写(权限)入门概述我们为什么要学习Linuxlinux诞生了这么多年,以前还喊着如何能取代windows系统,现在这个口号已经小多了,任何事物发展都有其局限性都有其天花板。就如同在国内再搞一个社交软件取代腾讯一样,想想而已基本不可能,因为用户已经习惯于使用微信交流,不是说技术上实现不了解而是老百姓已经习惯了,想让他们不用,即使他们自己不用亲戚朋友还是要用,没有办法的事情。用习惯了windows操作系统,再让大家切换到别的操作系统基本上是不可能的事情,改变一

    2022年5月18日
    35
  • sense官网(sense的用法)

    OPNsense利用通用地址冗余协议或CARP进行硬件故障转移。可以将两个或多个防火墙配置为故障转移组。如果主节点上的一个接口出现故障,或者主节点完全脱机,则辅助节点将变为活动状态。利用OPNsense的这一强大功能,可创建具有自动无缝故障转移功能的完全冗余防火墙。切换到备份网络时,连接将保持活动状态,同时对用户的干扰最小。自动故障转移如果主防火墙变得不可用,则辅助防火墙将在…

    2022年4月13日
    109
  • thinkphp在app接口开发过程中的通讯安全认证

    thinkphp在app接口开发过程中的通讯安全认证

    2021年11月7日
    71
  • 复录比低的计算机学校,这7所报录比低的实力院校,赶紧捡漏一波!

    复录比低的计算机学校,这7所报录比低的实力院校,赶紧捡漏一波!原标题:这7所报录比低的实力院校,赶紧捡漏一波!俗话说:考研选对专业和院校,就等于成功了一半。很多准考研er对如何选择适合自己的院校仍感到很焦虑,而报录比就是选择院校专业很重要的参与因素之一。报录比报录比是指报考人数和实际录取人数的比例,可以帮助考生了解院校报考人数、拟录取人数与实际录取人数之间的比例。如果报录比大于1,就说明报考的人数比录取的人数多;如果报录比小于1,就说明报考的人数比录取的人数…

    2022年6月9日
    58
  • 详解scheduleAtFixedRate与scheduleWithFixedDelay原理

    详解scheduleAtFixedRate与scheduleWithFixedDelay原理前言前几天,肥佬分享了一篇关于定时器的文章你真的会使用定时器吗?,从使用角度为我们详细地说明了定时器的用法,包括fixedDelay、fixedRate,为什么会有这样的区别呢?下面我们从源码角度分析下二者的区别与底层原理。jdk定时器这里不再哆嗦延迟队列、线程池的知识了,请移步下面的链接延迟队列原理,http://cmsblogs.com/?p=2448线程池原理,http://…

    2025年8月6日
    2
  • 三维空间坐标系变换-旋转矩阵「建议收藏」

    三维空间坐标系变换-旋转矩阵「建议收藏」    空间中三维坐标变换一般由三种方式实现,第一种是旋转矩阵和旋转向量;第二种是欧拉角;第三种是四元数。这里先介绍旋转矩阵(旋转向量)与欧拉角实现三维空间坐标变换的方法以及两者之间的关系。    这里以常见的世界坐标系与相机坐标系间的变换为例。一、首先介绍从相机坐标系转换到世界坐标系,也就是比较通用的body到世界坐标系间的转换。    那么旋转的欧拉角按从世界坐标…

    2025年7月29日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号