Mysql创建存储过程以及设置定时任务

创建数据库及相关表

-- 创建数据库
CREATE DATABASE `2022-07-11`;

USE `2022-07-11`;
-- 创建测试表
CREATE TABLE `7-11` (
  `ID` int(10) unsigned NOT NULL,
  `CONTENT` varchar(100) NOT NULL,
  `TIME` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- 创建存储过程测试表
CREATE TABLE `7-11_sync` (
  `ID` int(10) unsigned NOT NULL,
  `CONTENT` varchar(100) NOT NULL,
  `TIME` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- 创建存储过程日志表
CREATE TABLE `task_invok_log` (
  `time` datetime NOT NULL COMMENT 入表时间,
  `task_name` varchar(100) NOT NULL COMMENT 定时任务名称,
  `task_code` varchar(10) NOT NULL COMMENT 定时任务编码,
  `result_code` varchar(10) NOT NULL COMMENT 00000代表成功,其他为sqlstate,
  `log_msg` text COMMENT 异常日志
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

创建存储过程

-- 创建一个有指定权限的存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `2022-07-11`.`7-11invok`()
begin 
-- 创建变量
-- DECLARE 声明参数
declare t_error char(5) default 0000;
declare msg text;
declare continue handler for sqlexception 
	begin
		get diagnostics condition 1
		t_error = returned_sqlstate,
		msg = message_text;
	end;
start transaction;

-- 删除测试表历史数据
delete FROM `7-11` WHERE TIME<DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 MONTH),%Y%m);

-- 像存储过程测试表添加数据
INSERT INTO `7-11_sync`
(SELECT * FROM `7-11`WHERE TIME = DATE_FORMAT(CURDATE(),%Y%m) );
-- 添加存储过程运行日志
if t_error = 0000 then
	commit;
	insert into task_invok_log values(now(),7-11invok(),1,t_error,执行成功);
else
	rollback;
	insert into task_invok_log values(now(),7-11invok(),1,t_error,msg);
end if;
end

-- 查看事件调试器是否开启   show variables like event_scheduler;
-- 启动事件调试器 set global event_scheduler = ON;

创建定时事件

-- 创建定时事件
CREATE EVENT `7-11_EVENT`
-- 设置定时器执行周期 常见时间单位 YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND
ON SCHEDULE EVERY 1 MONTH
-- 定时器开始时间
STARTS 2022-07-11 11:00:00.000
-- 完成并保存
ON COMPLETION PRESERVE
ENABLE
-- 调用存储过程
DO CALL `2022-07-11`.`7-11invok`()
经验分享 程序员 微信小程序 职场和发展