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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • latex公式换行后保证括弧大小相同

    latex公式换行后保证括弧大小相同latex公式换行方法一:\left\{xxxxx\right.\left.xxxxx\right\}此方法可能导致上下括号大小不同为解决此问题,需要自定义括号大小,自带的大小控制符有\big,\Big,\bigg,\Bigg\big\{xxxxxxxxx\big\}这样人为定义了同样大小的括弧,根据需要调整括弧控制符即可…

  • 面向过程,面向对象,面向接口,面向切面的区别

    面向过程,面向对象,面向接口,面向切面的区别

  • 憨批的语义分割重制版6——Pytorch 搭建自己的Unet语义分割平台「建议收藏」

    憨批的语义分割重制版6——Pytorch 搭建自己的Unet语义分割平台「建议收藏」憨批的语义分割13——Pytorch搭建自己的Unet语义分割平台注意事项学习前言什么是Unet模型代码下载Unet实现思路一、预测部分1、主干网络介绍2、加强特征提取结构3、利用特征获得预测结果二、训练部分1、训练文件详解2、LOSS解析训练自己的Unet模型注意事项这是重新构建了的Unet语义分割网络,主要是文件框架上的构建,还有代码的实现,和之前的语义分割网络相比,更加完整也更清晰一些。建议还是学习这个版本的Unet。学习前言还是快乐的pytorch人。什么是Unet模型Unet是一个

  • 119149_1125*2436

    119149_1125*2436题意理解:http://acm.timus.ru/problem.aspx?space=1&num=1142有N个对象,问有多少种关系?问题分析:用动态规划做:f(a,b)表示a个对象分成b组的分法。b组的意思是a个对象放到b个篮子里,每个篮子的对象之间是相等关系。初始值:f(0,0)=1;f(0,1…N)=0;f(1…N,0)=0递归式:f(a,b)=f(…

  • pytest fixtures_pytest命令

    pytest fixtures_pytest命令fixture的优势Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进:命名方式灵活,不局限于setup和teardown这几个命名conf

  • PYTHON主机_我的Python世界PDF

    PYTHON主机_我的Python世界PDF学了好长一段时间Python了,前段时间想找个支持Python(Django)的空间来试试。国外的主机虽然性价比高(都是按G来算),但是没有美元也没有信用卡,就没法了。国内的支持Python(Django)的空间还真是少,我找了好几天就看到两个比较好的:捌号主机和浪点 。但是捌号主机的空间也真是有够贵的,是便宜的也是好几百。最后我选择了浪点的空间。浪点的空间要普通级以上才能开通

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

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