MySQL event,作业,事件调度

 

 

创建表记录event执行过程

复制代码
CREATE TABLE `mysql`.`event_history` (
  `dbname` VARCHAR(128) NOT NULL DEFAULT '',
  `eventname` VARCHAR(128) NOT NULL DEFAULT '',
  `starttime` DATETIME NOT NULL DEFAULT '0000-01-01 00:00:00',
  `endtime` DATETIME DEFAULT NULL,
  `issuccess` INT(11) DEFAULT NULL,
  `duration` INT(11) DEFAULT NULL,
  `errormessage` VARCHAR(512) DEFAULT NULL,
  `randno` INT(11) DEFAULT NULL,
  PRIMARY KEY (`dbname`,`eventname`,`starttime`),
  KEY `idx_endtime` (`endtime`),
  KEY `idx_starttime_randno` (`starttime`,`randno`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 collate utf8mb4_general_ci;
复制代码

 

Example

1:

复制代码
DELIMITER $$
CREATE DEFINER=`root`@`localhost` EVENT `event1`
#修改以下调度信息
ON SCHEDULE EVERY 1 DAY STARTS '2014-01-03 01:00:00' ON COMPLETION PRESERVE ENABLE 
DO 
BEGIN
    DECLARE r_code CHAR(5) DEFAULT '00000';
    DECLARE r_msg TEXT;
    DECLARE v_error INTEGER;
    DECLARE v_starttime DATETIME DEFAULT NOW();
    DECLARE v_randno INTEGER DEFAULT FLOOR(RAND()*100001);
    
    
    #修改下面的作业名(该作业的名称)
    INSERT INTO mysql.event_history (dbname,eventname,starttime,randno) VALUES (DATABASE(),'event1', v_starttime,v_randno); 
  
         
    BEGIN
        #异常处理段
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION  
        BEGIN
            SET  v_error = 1;
            GET DIAGNOSTICS CONDITION 1 r_code = RETURNED_SQLSTATE , r_msg = MESSAGE_TEXT;
        END;
        
        #此处为实际调用的用户程序过程
        CALL test.usp_test1();
    END;
    
    UPDATE mysql.event_history SET endtime=NOW(),issuccess=ISNULL(v_error),duration=TIMESTAMPDIFF(SECOND,starttime,NOW()), errormessage=CONCAT('error=',r_code,', message=',r_msg),randno=NULL WHERE starttime=v_starttime AND randno=v_randno;
    
END$$
DELIMITER ;
复制代码

 

2:

复制代码
create table tbl_v(
id int not null auto_increment,
user varchar(20) collate utf8mb4_general_ci default '',
createTime datetime default now(),
primary key (id)
)engine=innodb auto_increment default charset=utf8mb4 collate utf8mb4_general_ci;
复制代码
复制代码
create event if not exists event_1
on schedule every 5 second
on completion perserve
do
    insert into tbl_v (user) values ('uiop');
复制代码

 

3:

复制代码
delimiter //
drop procedure if exists procedure_flush_hosts //
create procedure procedure_flush_hosts()
begin
    flush hosts;
end //
delimiter ;
复制代码
复制代码
drop event is exists event_flush_hosts;
create event event_flush_hosts
on schedule every 120 second
on completion preserve disabled
do call procedure_flush_hosts();
复制代码

 

 

 

开启event

alter event event_1 on completion preserve enable;

关闭event

alter event event_1 on completion preserve disable;

 

posted @   ascertain  阅读(72)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示