精华内容
下载资源
问答
  • mysql定时执行存储过程
    千次阅读
    2022-03-18 23:56:27

    1、创建存储过程

    CREATE DEFINER=`root`@`%` PROCEDURE `synData`()
    BEGIN
    	 drop table if exists user;
    	 create table user select * from rych.user;
    END
    

    2、创建定时任务事件

    CREATE DEFINER=`root`@`localhost` EVENT `loop_syn` 
    ON SCHEDULE EVERY 20 MINUTE STARTS '2022-03-18 03:05:00' 
    ON COMPLETION NOT PRESERVE ENABLE 
    DO CALL `synData`
    

    3、开启定时器

    set GLOBAL event_scheduler = 1; 
    

    4、开启/暂停事件

    ALTER EVENT loop_syn ENABLE;
    
    更多相关内容
  • MYSQL定时执行存储过程

    千次阅读 2021-03-04 00:08:37
    本文重点,用mysql定时器定时执行存储程序。 第一步:编写存储程序(需了解基本的存储程序的语法) Sql代码 create procedure inproc() begin declare done int default 0; declare a,b,c int; declare curl cursor...

    查看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

    展开全文
  • 1、在mysql 中建立一个数据库 test1 语句:create database test1 2、创建表examinfo create table examinfo( id int ... 4 创建存储过程test CREATE PROCEDURE test () BEGIN update examinfo SET endtime = now() WH
  • mysql存储过程实现定时任务执行

    千次阅读 2022-04-03 22:43:10
    1开启函数:在执行创建函数之前,首先请保证 log_bin_trust_function_creators 参数为 1,即 on 开启状态。 2.开启设置: 设置只存在于当前操作, set global log_bin_trust_function_creators=1; show ...

    一 函数

    1.1 函数开启

    1开启函数:在执行创建函数之前,首先请保证 log_bin_trust_function_creators 参数为 1,即 on 开启状态。

    2.开启设置:

    设置只存在于当前操作,

    set global log_bin_trust_function_creators=1;

    show variables like 'log_bin_trust_function_creators';

     3.永久性设置的话:想要永久生效,需要写入到配置文件中:

    [mysqld] 中加上 log_bin_trust_function_creators=1

    1.2 函数的案例

    1.创建

    DELIMITER $$ 
    CREATE FUNCTION rand_num (from_num INT ,to_num INT) 
    RETURNS INT(11) 
    BEGIN 
    DECLARE i INT DEFAULT 0; 
    SET i = FLOOR(from_num +RAND()*(to_num -from_num+1)) ; 
    RETURN i; 
    END$$

    2.调用

    select  rand_num(10,30)  from  nongda.tb_org

    1.3 删除函数

    如果要删除函数:drop function rand_num; 

    1.4 函数和存储过程的区别

    函数有返回值;存储过程没有返回值

    二 存储过程

    2.1 存储过程

    1.声明存储过程

    #执行存储过程,往 dept 表添加随机数据 
    DELIMITER $$
    CREATE PROCEDURE `insert_dept`( max_num INT ) 
    BEGIN 
    DECLARE i INT DEFAULT 0; 
    SET autocommit = 0; 
    REPEAT SET i = i + 1; 
    INSERT INTO dept (id,name) VALUES (rand_num(1,500000),'ljf');
    UNTIL i = max_num 
    END REPEAT; 
    COMMIT;
    END$$

    2.调用存储过程

    DELIMITER ;
    call insert_dept(50)

    3.查看结果:

    三 存储过程的定时任务

    3.1 查看是否开启事件

    1.show variables like '%event_sche%';

    2. 开启:

     错误信息是:

    Error Code: 1290. The MySQL server is running with the –event-scheduler=DISABLED or –skip-grant-tables option so it cannot execute this statement

    skip-grant-tables这个选项用于启动MySQL时跳过权限表的限制,不验证密码。但是如果有了skip-grant-tables,那么event-scheduler是不起作用的,可能也是为了安全性的考虑。

    远程到mysql服务器上将my.ini的skip-grant-tables选项去掉,然后确定在my.ini中:

    event_scheduler=1

    3.修改如下:

    4.重启mysql:以管理员身份,进行关闭数据库和启动数据库

     4.再次查看

    5. 如果执行完这一句,如果显示access denied;

    表示你没有开启定时任务的权限,联系运维给你开通权限。

    5.1 在安装的MySQL的目录下,找my.ini文件;新增:skip-grant-tables 

    5.2 再重启服务器mysql

    5.3  登录mysql,键入mysql –uroot –p;直接回车(Enter)

    5.4.输入mysql回车,如果成功,将出现MySQL提示符 >。 
          连接权限数据库: use mysql;  

    update user set authentication_string=password('123') where user='root';

     5.5 退出 quit,停止服务器 

    5.6  再到 my.ini文件中注释掉 #skip-grant-tables。

    5.7 重启服务器,OK!


    3.2  设置定时任务

    思想: 先创建存储过程,再定义执行周期

    1.设置存储过程

    -- 创建存储过程test
    CREATE PROCEDURE test_d2 ()
    BEGIN
     
    DROP TABLE IF EXISTS test_ddd;
    /*************************************/
    CREATE table test_ddd AS SELECT NOW()
    ;
    END;

    2.设置定时事件

     create event if not  exists t_event_name  on schedule at '2022-07-22 08:17:00' on completion preserve
     do call test_d2();

    3.结果:

     

     

    案例2: 设置每5秒执行一次

    DROP EVENT IF EXISTS hh;
    create event hh
    ON SCHEDULE EVERY 5 SECOND STARTS TIMESTAMP '2022-07-21 01:00:00'
    ON COMPLETION PRESERVE
    DO
    begin
    CALL test_d2();
    end

     

    3.3 常见任务执行周期的设定


    # 从2019-10-11开始,每天的00:30:00执行定时任务
    ON SCHEDULE EVERY 1 DAY STARTS '2019-10-11 00:30:00'  
     
    # 每天的凌晨1点执行定时任务
    ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)
     
    # 特定的日期特定的时间点执行定时任务
    ON SCHEDULE at '2019-10-10 19:14:10'
     
    # 每五分钟执行一次定时任务
    ON SCHEDULE EVERY 5 MINUTE STARTS CURDATE() 
     
    # 每小时执行一次定时任务
    ON SCHEDULE EVERY 1 HOUR STARTS CURDATE() 
     
    展开全文
  • 比如说每天的12:30执行查看event是否开启: show variables like '%sche%';将事件计划开启: set global event_scheduler=1;关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE;开户事件任务: alter ...

    比如说每天的12:30执行

    查看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 让一个存储过程定时作业的代码

    1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...

    mysql 让一个存储过程定时作业的代码(转)

    1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...

    Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101

    视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由 ...

    修正MYSQL错误数据的一个存储过程

    -- 添加索引 CREATE INDEX idx_STRUCTURE_ID ON t_resource_info(STRUCTURE_ID); DROP PROCEDURE IF EXISTS `P_ ...

    mysql定时任务,每天的零点执行一个存储过程

    1 前言 利用navicat工具来写存储过程及定时执行,此文章是按照自身经验总结的,仅作为记录使用. 2 步骤 2.1 新建过程 2.2 在函数体写你需要执行的代码 CREATE DEFINER=`r ...

    MVC 定时执行任务

    环境:.net4.5 需求:需要一个方法定时执行任务 解决: System.Threading.Timer 提供以指定的时间间隔执行方法的机制. 此类不能被继承,有10多种实例化方法,满足多种情况. ...

    mysql创建定时执行存储过程任务

    sql语法很多,是一门完整语言.这里仅仅实现一个功能,不做深入研究. 目标:定时更新表或者清空表. 案例:曾经做过定时清空位置信息表的任务.(然而,当时并未考虑服务器挂掉后的情况) 本次测试:每5s更 ...

    mysql命令行创建存储过程命令行定时执行sql语句

    mysql -uroot -p show databases; use scm; show tables; show procedure status; 其他命令: SHOW VARIABLES LI ...

    使用oracle 的 PL/Sql 定时执行一个存储过程

    CSDN日报20170322-- 同步博客至 CSDN ,让更多开发者看到你的文章 看微博技术大咖解析互联网应用架构实战 使用oracle 的 PL/Sql ...

    随机推荐

    JavaScript的学习5

    一.DOM对象 1.DOM对象:Document  Object  Model  文档对象模型,主要是用来提供了操作HTML文档的属性与方法 2.DOM的分类: a.核心DOM:为操作XML和HTML ...

    [C++]项目中的代码注释规范(整理)

    原文:http://blog.csdn.net/pleasecallmewhy/article/details/8658795 1 源文件头部注释 列出:版权.作者.编写日期和描述. 每行不要超过80 ...

    怎么解决/bin/sh: arm-linux-gcc: not found make

    1.arm-linux-gcc 环境变量没有设,所以找不到这个编译器 在/etc/profile里添加arm-linux-gcc的存放路径 sudo -s gedit /etc/profile 编 ...

    图解TCP/IP读书笔记(一)

    图解TCP/IP读书笔记(一) 第一章 网络基础知识 本学期的信安概论课程中有大量的网络知识,其中TCP/IP占了相当大的比重,让我对上学期没有好好学习计算机网络这门课程深感后悔.在老师的推荐下开始阅 ...

    管理和维护RHCS集群

    导读 管理和维护RHCS集群是一个非常复杂和繁琐的工作,要维护好一个RHCS集群,必须熟悉RHCS的基本运行原理,在集群管理方面,RHCS提供了两种方式:即Luci图形界面方式和命令行方式,这儿重点讲 ...

    [POJ 2774] Long Long Message 【后缀数组】

    题目链接:POJ - 2774 题目分析 题目要求求出两个字符串的最长公共子串,使用后缀数组求解会十分容易. 将两个字符串用特殊字符隔开再连接到一起,求出后缀数组. 可以看出,最长公共子串就是两个字符 ...

    Java For循环效率试验

    非常奇怪的结果! ..! 测试方法如以下 public class Main { public static void main(String[] args){ long ti = System.cu ...

    Servlet过滤器——过滤器分析流量

    1.概述 Servlet过滤器可以对用户提交的数据或服务器返回的数据进行更改.任何到达服务器的请求都会首先经过过滤器的处理.本实例应用过滤器的这个特点,编写了一个在过滤器中统计网站流量的实例. 本实例 ...

    node.js之调试器

    node.js之调试器 1.在命令行窗口中,可以使用"node debug" 命令来启用调试器,代码如下: node debug 接下来根据一 ...

    展开全文
  • mysql定时执行存储过程demo

    千次阅读 2017-04-12 17:51:16
    #每隔10秒将执行存储过程p_test ONCOMPLETION PRESERVE DO BEGIN CALL stored_procedure(); END // =================================================================...
  • 目标:定时更新表或者清空表。案例:曾经做过定时清空位置信息表的任务。(然而,当时并未考虑服务器挂掉后的情况)本次测试:每5s更新表字段+11.prepare创建一个表:DROP TABLE IF EXISTS `test_sche`;CREATE TABLE `...
  • 1.创建存储过程用的navicate for mysql 在navicate中的函数新建函数 2.创建定时任务,在navicate中的事件新增事件
  • 1、存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 语法: CREATE PROCEDURE 过程名([...
  • 今天协助BI工程师开发存储过程,通过Navicat执行事件定时任务调用存储过程,发现事件并没有执行,特此记录
  • mysql存储过程传参问题

    千次阅读 2022-04-29 19:47:14
    如果仅仅想传给mysql存储过程,那就用in类型 如果仅仅从mysql存储过程返回值,那就用out类型 如果需要把数据传给mysql存储过程,还要经过一些计算再回传我们,此时,要使用inout类型 1.无参数 call 存储...
  • 存储过程 DROP PROCEDURE IF EXISTS canal_test; # 删除存储过程 CALL canal_test(); # 调用存储过程 CREATE PROCEDURE canal_test() #创建存储过程 #存储过程内容 BEGIN #开始 update users set mileage=...
  • 使用navicat创建存储过程 BEGIN #Routine body goes here... DECLARE startTime DATETIME default date_sub(now(),interval 60 MINUTE);#起始时间 当前时间前一小时 DECLARE endTime DATETIME default NOW();...
  • 一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。 说...
  • 但是在query窗口中执行存储过程时,由于mysql 事务是默认关闭的,如果有insert 或者update 操作会自动提交. 所以在存储过程循环结尾 加一个commit ,问题解决 . 可以用 RESET QUERY CACHE; 清空缓存 ,重新检查一下...
  • 创建存储过程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 ...
  • mysql怎么让一个存储过程定时执行查看event是否开启: show variables like '%sche%';将事件计划开启: set global event_scheduler=1;关闭事件任务: alter event e_test ON COMPLETION PRESERVE DISABLE;开户事件任务...
  • 比如有如下需求:删除某个表中当前...1.创建存储过程test()//删除ljh_test表中超过8分钟的记录//date_add() 增加//date_sub()减少//month 月份minute 分钟second 秒//例如:select DATE_ADD(NOW(),INTERVAL 1 MONTH);...
  • mysql定时事件可以设定在某个时间自动执行步骤如下: 注:如果是不知道如何创建存储过程,请查看我的上一篇博文 查看定时器是否开启: show variables like 'event_scheduler'; 查询结果如下: 此时说明没有...
  • 下面的案例是创建一个对表插入数据的存储过程,然后创建一个定时任务执行存储过程。 创建一张关于环境数据的表wjs_dust_record_02;将设备获取到的环境数据信息存储到该表中。创建一个存储过程,作用是...
  • Mysql 存储过程定时执行

    千次阅读 2018-08-18 17:14:26
    前提:这里我使用存储过程实现数据库的count值每5秒加一的功能,首先你的有一张表counter 1、创建存储过程 ... 代码如下 ...update counter set count=count+1;...2、定时执行 创建事件,如下图 CREATE EVENT cou...
  • 简单介绍定时任务的开启,编写,定时任务调用存储过程等。
  • mysql定时任务 每日执行存储过程

    千次阅读 2019-08-26 19:09:07
    原文链接:mysql定时任务 每日执行存储过程 1、操作工具Navicat数据库操作工具。 2、创建一个存储过程 例如:delete From apply_setdtl where DATE(create_date) <= DATE(DATE_SUB(NOW(),INTERVAL 1 day)); -...
  • 我们在项目得开发中,有时候需要执行定时任务,一般情况下是在代码块中创建定时器,执行某一些业务,一般情况下是更改数据库字段的值,下面给大家介绍下,如果使用sqlYog 创建mysql存储过程,并定时执行 ...
  • 事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。...
  • 主要介绍了MySQL数据库Event定时执行任务

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,550
精华内容 21,020
关键字:

mysql定时执行存储过程

mysql 订阅