◉◡◉ 您好,欢迎到访伊成个人站!

MYSQL中如何调用存储过程

背景

最近公司有一个需求每天晚上定时需要往某个表里面插入一条汇总数据。解决方案有几个,可以通过编写代码添加一个定时任务接口;还有一个则可以利用MYSQL中的定时调度存储过程解决,其实两种方案都可以,这里我选择的是 MYSQL 定时调用 存储过程。

具体实现过程

1.先看看定时器的状态,执行如下命令:

1
show VARIABLES LIKE '%sche%';

image-20221123174451389

event_scheduler : OFF 代表没有开启。这里需要执行以下命令开启:

1
SET GLOBAL event_scheduler = 1;

image-20221123174821425

2.编写存储过程,格式如下:

1
2
3
4
5
6
-- 存储过程 
CREATE PROCEDURE 存储过程名()

BEGIN
-- 这里编写你的业务逻辑SQL
END;

3.测试写好的存储过程

1
call 存储过程名

4.开启事件,定时调用

1
2
3
create event 事件名
on schedule EVERY 1 DAY STARTS '2022-11-10 23:51:00' -- 执行时间
do call 存储过程名;

到此,完整流程就是以上这些了。最后附上我的完整SQL,供参考。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-- 查看定时器的状态
show VARIABLES LIKE '%sche%';

-- 开启
SET GLOBAL event_scheduler = 1;

-- 存储过程
CREATE PROCEDURE saveTownActiveRateSortDataDaily()

BEGIN
set @sumactivenums =(select sum(activenums) from t_table_town_active_rate_sort_data);
set @sumbicyclenums =(select sum(bicyclenums) from t_table_town_active_rate_sort_data);
set @cnt = (SELECT DATE_FORMAT(SYSDATE(),'%Y-%m-%d %H:%i:%s'));

insert into t_table_bicycle_diagram_info(sum_active_num,sum_bicycle_num,insert_date)
VALUES (@sumactivenums, @sumbicyclenums, @cnt);
END;

-- 调用
call saveTownActiveRateSortDataDaily

-- 开启事件,定时调用
create event save_data
on schedule EVERY 1 DAY STARTS '2022-11-10 23:51:00'
do call saveTownActiveRateSortDataDaily();

The end.

支付宝打赏 微信打赏